通过phpseclib登录远程服务器后如何在远程服务器(二级)上执行命令?

How to execute a command on remote server (second level) after logging on a remote server via phpseclib?

我必须从远程服务器登录到服务器。我能够使用 phpseclib 登录到远程服务器。之后我可以从那里登录到下一个服务器,但下一个命令在第一个服务器上执行,而不是第二个服务器。例如:

  1. 通过 SSH
  2. 登录 server1.example.com
  3. 使用来自服务器 1 的内部脚本登录远程-server.example.com。
  4. 执行'ls'.

ls returns 来自 server1 而不是远程服务器的输出。

您绝对确定 server1 上的脚本确实登录到远程服务器(并且不会立即注销)吗?我能想到的唯一解释是 "ls" 命令在远程服务器上并不是真正的 运行。如果您共享脚本和确切的命令,那可能有助于解决问题。 (整个交换的 "script" 输出也可能有帮助。)

类似以下内容可能也适合您:

ssh server1.example.com ssh remote-server.example.com ls

根据您的远程命令,您还可以执行以下操作:

ssh server1.example.com "ssh remote-server.example.com ls"

(如果涉及重定向,则可能需要后者,否则可能会被您的本地 shell 解释。)

当您使用 phpseclib 时,它可能会处理上面示例中的第一个 ssh。所以你可能会使用类似的东西:

$ssh->exec("ssh remote-server.example.com ls")

或者如果您在第二步使用 public 密钥身份验证,也许:

$ssh->exec("ssh -i ~/.ssh/keyfile remote-server.example.com ls")

https://www.ssh.com/ssh/command/

上有一个关于如何使用 ssh 运行 远程命令的快速总结