我正在尝试使用ssh在远程服务器上执行命令。命令如下
ssh machine -l user "ls"这个命令被夹在中间,最后我们不得不挂起它。
但是,执行命令ssh machine -l user很好,这个命令使我们连接到远程机器。
有人能帮忙找出远程服务器上ls不工作的根本原因吗?
编辑1:这是在SSH中使用-v开关后的输出
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后,端子就会挂起来。
发布于 2015-05-14 13:19:10
我怀疑有两件事正在发生。首先,可以将ssh服务器设置为启动用户的特定命令,而不管您要求运行哪个命令。例如,如果用户是仅限于以通常的方式运行SFTP,您就会看到这种行为。有两种方法可以设置:
检查这一点的最简单方法是登录到远程服务器并检查这两个文件。或者,您可以启动其中一个ssh会话,让它挂起,然后在远程服务器上运行"ps“,以查看所涉用户实际运行的进程。
另一种可能是,远程用户在他的.bashrc或其他shell启动脚本中有一行代码,用于引入等待,或者等待您键入某些内容。同样,您应该启动其中一个ssh会话,让它挂起,然后在远程服务器上运行"ps“,以查看用户实际运行的进程。
发布于 2015-05-14 10:57:24
问题:这个问题是发生在命令行上还是在脚本中?你的密码被提示了吗?有输出吗?如果是的话:把它贴在这里。
试试看
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‘命令挂起而没有任何输出的问题。当目录中有一些文件系统在某种程度上“无效”时,我就会遇到这种情况。例如,如果android mtpfs的挂载无效,则ls命令无法处理,因此挂起。
因此,尝试“是”一个不同的目录。
ssh host -l user "ls /tmp"
如果此操作有效,则从命令行检查是否存在导致ls命令失败的无效状态的目录或文件。
https://stackoverflow.com/questions/30235423
复制相似问题