【问题标题】:ssh multiple host (host B via host A) through php通过 php SSH 多个主机(主机 B 通过主机 A)
【发布时间】:2015-11-27 10:07:18
【问题描述】:

我想通过 PHP 中的 libssh2-php 包从 web 主机 ssh 主机 A,并从主机 A ssh 主机 B。

有可能吗?

我知道 libssh2-php 包执行一个 ssh 连接。

像这样:

在 web 主机中连接到 hostA。

$conn = ssh2_connect($hostA, $portA);

但我想从 hostA 连接到 hostB。

请帮帮我。

【问题讨论】:

  • 你想在主机 B 上做什么?
  • 我想在主机B上执行指令

标签: php ssh


【解决方案1】:

PHP libssh2 库确实支持连接隧道,请参阅ssh2_tunnel function

resource ssh2_tunnel ( resource $session , string $host , int $port )

但该函数确实返回了一个套接字流。恐怕无法将该套接字流绑定回 libssh2 以在其上运行另一个 SSH 会话。

所以我的结论是,在 PHP 中没有本地方法可以做到这一点(使用 libssh2)。


您可以改为从 PHP 运行命令行 ssh。为此,您必须设置某种自动登录。您会在网上找到大量资源。

例如,您可以在“主机 B”上设置一个特殊的私钥,只允许执行您需要的指令(使用 authorized_keys 中的 command 指令)。然后,将未加密的密钥存储在“主机 A”上。

在PHP中,使用ssh2_exec使用私钥从“主机A”执行命令行ssh,在“主机B”上执行指令。

【讨论】:

  • 是的,你是对的。我找到了另一种方法,但我不明白该怎么做。它说“您将需要从隧道套接字和 socket_listen 传输所有数据。这很简单吗?错了。PHP 不允许线程执行,因此您需要 pcntl_fork 一个 proc 关闭来进行管道传输。”你能帮帮我?
  • 你好,你这样说:ssh_exec($conn,'ssh -i id_rsa root@ip ls -al') ?
  • 是的,没错。 $conn 应指与“主机 A”的现有 SSH 连接。
  • 那么有没有办法保持连接,对吧?因为我需要像 openShell 这样的其他 exec。
  • 好吧,一切皆有可能,但实现起来会更加困难。
猜你喜欢
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2017-08-08
  • 2017-02-08
  • 2019-01-14
相关资源
最近更新 更多