2015-09-02 90 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