通过ssh在远程执行命令不起作用

时间:2015-05-14 10:49:30

标签: linux unix ssh

我正在尝试使用ssh在远程服务器上执行命令。该命令为

ssh machine -l user "ls"

这个命令卡在两者之间,最后我们必须暂停它。

但是,执行命令ssh machine -l user工作正常,此命令使我们连接到远程计算机。

有人可以帮助解决为什么远程服务器上的ls无法通过ssh工作的根本原因。

编辑1:这是使用-v开关和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

打印Sending command: ls后,终端卡住了。

2 个答案:

答案 0 :(得分:3)

我怀疑发生了两件事之一。首先,可以将ssh服务器设置为为用户启动特定命令,而不管您要求运行什么命令。例如,如果用户是restricted to running SFTP in the usual manner,您会看到此行为。有两种方法可以设置:

  1. 远程服务器sshd configuration file中的 ForceCommand 指令。
  2. 远程用户authorized_keys file中有关正在使用的密钥的指令。
  3. 检查此问题的最简单方法是登录远程服务器并检查这两个文件。或者,您可以启动其中一个ssh会话,让它挂起,然后在远程服务器上运行“ps”以查看正在为相关用户运行的实际进程。

    另一种可能性是远程用户在他的.bashrc或其他shell启动脚本中有一行,它引入了等待或者等待你输入内容。同样,您应该启动其中一个ssh会话,让它挂起,然后在远程服务器上运行“ps”以查看为用户运行的实际进程。

答案 1 :(得分:0)

问题: 问题是在命令行上还是在脚本中出现? 你被提示你的passowrd? 有没有输出?如果是,请在此处发布。

然后尝试

ssh -v user@host "ls"

ssh -v -l user host "ls"

您将获得额外的输出。您可以使用-v选项最多3次以获得更高的详细程度。

ssh -vvvl user host "ls"

编辑:

如果我必须调试它,我会执行以下操作:

  • 转到目标计算机,即想要'ssh'的目标计算机。
  • 使用您尝试使用ssh
  • 的同一用户登录
  • 输入“ls”命令“

这是一个不寻常的事情,但'ls'不一定是你所期望的。在目标计算机的命令行上,尝试

which ls

然后使用带有ssh调用的完全限定名称的输出,例如:

ssh machine -l user "/bin/ls"

请记住,当通过ssh排除命令时,您不会自动拥有与常规登录相同的路径。

最后,检查目标计算机上的日志文件。它们通常位于/ var / log下(至少在debian下)。

EDIT2:

在linux机器上,我有时会遇到“ls”命令挂起而没有任何输出的问题。当目录中的文件系统以某种方式“无效”时,就会发生这种情况。例如,如果安装了无效的mtpfs,则ls命令无法处理并挂起。

所以试着'ls'一个不同的目录,例如

ssh host -l user "ls /tmp"

如果这样可行,则从命令行检查是否存在某个目录或文件,这些状态会导致ls命令失败。