我正在尝试使用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
后,终端卡住了。
答案 0 :(得分:3)
我怀疑发生了两件事之一。首先,可以将ssh服务器设置为为用户启动特定命令,而不管您要求运行什么命令。例如,如果用户是restricted to running SFTP in the usual manner,您会看到此行为。有两种方法可以设置:
检查此问题的最简单方法是登录远程服务器并检查这两个文件。或者,您可以启动其中一个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"
编辑:
如果我必须调试它,我会执行以下操作:
这是一个不寻常的事情,但'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命令失败。