2015-09-02 89 views
0

我想通过web主机ssh主机A,并通过PHP中的libssh2-php软件包从主机A ssh主机B.ssh多主机(主机B通过主机A)通过php

可能吗?

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

像这样:

在web主机连接到hostA。

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

但我想从hostA连接到hostB。

请帮帮我。

+0

你想在主机B上做什么? –

+0

我想执行主机B上的指令。 – user5290752

回答

0

的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”上的指令。

+0

是的,您是对的。 我找到另一种方法,但我不明白要做什么。 它说:“你将需要从隧道套接字和socket_listen管道传输所有数据,那很简单吗?错误.PHP不允许线程执行,所以你需要pcntl_fork来执行管道配置。” 你能帮我吗? – user5290752

+0

请参阅我编辑的答案。 –

+0

你好,你说的是这样的:ssh_exec($ conn,'ssh -i id_rsa root @ ip ls -al')? – user5290752