Mayank Jain
Mayank Jain

Reputation: 2564

Executing a command on remote via ssh doesn't work

I am trying to execute a command on remote server using ssh. The command is as

ssh machine -l user "ls"

This command get stuck in between and finally we have to suspend it.

But, executing the command ssh machine -l user works fine and this command makes us connect to remote machine.

Can someone please help in getting the root cause of why the ls on remote server doesn't work by ssh.

EDIT 1 : Here is the ouput after using -v switch with SSH

debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: ls

After printing Sending command: ls the terminal stucks.

Upvotes: 3

Views: 23521

Answers (2)

Kenster
Kenster

Reputation: 25380

I suspect one of two things is happening. First of all, the ssh server may be set to start a particular command for the user, regardless of what command you asked to run. You'd see this behavior if the user was restricted to running SFTP in the usual manner, for example. There are two ways this may be set up:

  1. A ForceCommand directive in the remote server's sshd configuration file.
  2. A directive in the remote user's authorized_keys file for the key being used.

The simplest way to check this would be to log in to the remote server and examine the two files. Alternately, you could start one of these ssh sessions, let it hang, and then run "ps" on the remote server to see what actual processes are running for the user in question.

The other possibility is that the remote user has a line in his .bashrc or other shell startup script which is introducing a wait or else waiting for you to type something. Again, you should start one of these ssh sessions, let it hang, and then run "ps" on the remote server to see what actual processes are running for the user.

Upvotes: 7

emax
emax

Reputation: 387

Questions: Does the problem occur on the commandline or within a script? Are you prompted for your passowrd? Is there any output? If yes: post it here.

And try

ssh -v user@host "ls"

or

ssh -v -l user host "ls"

and you will get additional output. You can use -v option upto 3 times for higher verbosity.

ssh -vvvl user host "ls"

EDIT:

If I had to debug this, I'd do the following:

  • go to the target machine, the one you want to 'ssh' to.
  • log in with the same user you tried with ssh
  • enter the "ls" command"

It is an unusal thing, but 'ls' is not necessarily what you expect it to be. At the commandline on the target-machine, try

which ls

and then use the output with the fully qualified name for your ssh call, e.g.:

ssh machine -l user "/bin/ls"

Remember, that when excuting a command via ssh you do not automatically have the same path as with a regular login.

Finally, examine your log-files on the target-machine. They usually reside under /var/log (at least under debian).

EDIT2:

On linux machines, I've sometimes experienced a problem with the 'ls' command hanging without any output. This happend to me when there were filesystems in the directory which were in some way 'invalid'. For example if there was an invalid mount of an android mtpfs, the ls command couldn't deal with that and hung.

So try to 'ls' a different directory, e.g.

ssh host -l user "ls /tmp"

If this works, then check from the commandline whether there is a directory or a file whith some invalid state which causes the ls command to fail.

Upvotes: 1

Related Questions