我想通过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。
请帮帮我。
我想通过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。
请帮帮我。
的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来执行管道配置。” 你能帮我吗? – user5290752
请参阅我编辑的答案。 –
你好,你说的是这样的:ssh_exec($ conn,'ssh -i id_rsa root @ ip ls -al')? – user5290752
你想在主机B上做什么? –
我想执行主机B上的指令。 – user5290752