首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ssh在远程上执行命令不起作用

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

Stack Overflow用户
提问于 2015-05-14 10:49:30
回答 2查看 19.4K关注 0票数 3

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

代码语言:javascript
复制
ssh machine -l user "ls"

这个命令被夹在中间,最后我们不得不挂起它。

但是,执行命令ssh machine -l user很好,这个命令使我们连接到远程机器。

有人能帮忙找出远程服务器上ls不工作的根本原因吗?

编辑1:这是在SSH中使用-v开关后的输出

代码语言:javascript
复制
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后,端子就会挂起来。

EN

回答 2

Stack Overflow用户

发布于 2015-05-14 13:19:10

我怀疑有两件事正在发生。首先,可以将ssh服务器设置为启动用户的特定命令,而不管您要求运行哪个命令。例如,如果用户是仅限于以通常的方式运行SFTP,您就会看到这种行为。有两种方法可以设置:

  1. 远程服务器的ForceCommand指令。
  2. 远程用户的键文件中用于正在使用的键的指令。

检查这一点的最简单方法是登录到远程服务器并检查这两个文件。或者,您可以启动其中一个ssh会话,让它挂起,然后在远程服务器上运行"ps“,以查看所涉用户实际运行的进程。

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

票数 4
EN

Stack Overflow用户

发布于 2015-05-14 10:57:24

问题:这个问题是发生在命令行上还是在脚本中?你的密码被提示了吗?有输出吗?如果是的话:把它贴在这里。

试试看

ssh -v user@host "ls"

ssh -v -l user host "ls"

你会得到额外的输出。您可以使用-v选项最多3次,以获得更高的详细内容。

ssh -vvvl user host "ls"

编辑:

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

  • 去目标机器,你想要的那台机器。
  • 使用ssh尝试的同一个用户登录。
  • 输入"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命令失败的无效状态的目录或文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30235423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档