從隱藏在具有公用 IP 的伺服器後面的沒有公用 IP 的伺服器 ssh 到沒有公用 IP 的伺服器

從隱藏在具有公用 IP 的伺服器後面的沒有公用 IP 的伺服器 ssh 到沒有公用 IP 的伺服器

我有以下設定:我想從電腦 C 存取電腦 A,但它們都沒有公用 IP 位址。不過,機器 C 與機器 B 位於同一網路中,機器 B 具有公共 IP 存取權限,因此我可以透過先 ssh 進入機器 B,然後從那裡 ssh 進入機器 C,從任何地方存取機器 C。存取權限,而A 和CI 上都有。請參閱下圖以進行說明:

machine A          machine B      machine C
no public IP       public IP      no public IP
root access        no root access root access     
how to access?    '---------------------------'
                           same network
                       hence both accessible

一個愚蠢的解決方案是讓機器A 定期嗅探機器C 中的檔案(透過上述的兩步驟ssh 存取),每當該檔案中出現命令時,執行它並透過ssh 將輸出寫入機器C 的某處。如果是的話,我該怎麼做?

答案1

您可能必須使用遠端轉送選項machineA開啟至 的 SSH 隧道machineB,這將允許您透過 SSHmachineA進入machineB

如果您在 上具有 root 存取權限machineB,則將設定GatewayPorts選項設為yesin /etc/ssh/sshd_config,然後在 上發出以下命令machineA

ssh -N -R 0.0.0.0:2222:127.0.0.1:22 the_public_ip_of_machine_B

這將開啟 上的連接埠 2222 machineB,並將該連接埠上的任何流量轉發到其自身,即連接埠22。您有無論如何都要打開防火牆machineB)。當此隧道處於活動狀態時,您可以透過 SSH 連接machineB到連接埠 2222,這將帶您到machineA.由於machineBmachineC位於同一子網,因此您可以machineA一步登入machineC

如果您沒有 root 存取權限machineB,則流程是相同的,但偵聽位址除外。如果GatewayPorts設定為no(這是預設值),則第一個參數 ( 0.0.0.0) 將被忽略,並且偵聽位址將綁定到127.0.0.1。在這種情況下,您仍然可以使用上面的命令,並且轉發將進行相同的工作,但是打開的連接埠將無法從除machineB.因此,您必須透過 SSH 連接到machineB,然後透過 SSH 連接到localhost連接埠 2222,這將帶您到達machineA

但是,您可能需要考慮使用更強大的東西,例如 VPN。

相關內容