我想通過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