背景:有三臺機器A、B、C,機器 A?位于某局域網內,能夠連接到互聯網。機器 B 有公網 IP,能被 A 訪問到。機器 C 位于另外一個局域網內,能夠連接到互聯網,能夠訪問 B。
目標:以 B 為中介,讓 C 能夠直接通過 ssh 連接到 A。
實現方法:使用 SSH 構建內網穿透隧道
1. 修改機器 B 的?/etc/ssh/sshd_config,設置?GatewayPorts yes
2. 在機器A的 ~/.ssh/authorized_keys 中添加機器 B 和機器 C 的公鑰。如果希望機器 A 能夠無密碼訪問機器 B,可以將機器 A 的公鑰添加到機器 B 的 ~/.ssh/authorized_keys 中,否則不要添加,不添加則在A上使用 ssh -NR 建立隧道時需要輸入機器 B 的密碼。
3. 在機器 A 上使用如下命令建立隧道:
ssh -NR [X1]:[X2]:[X3] [X4]@[X5]X1:機器B用于構建隧道的端口X2:機器A的localhost,可以寫為 0.0.0.0X3:機器A的端口,表示希望機器C經過隧道訪問到的A的端口,對于ssh連接,使用22端口X4:機器B用于構建隧道的用戶的用戶名X5:機器B的ip
4. 使用機器 C 連接機器 A:
ssh -p [X1] [X6]:[X5]X6:希望登錄到機器 C 的用戶名,注意該用戶不是機器 B 上的用戶,而是機器 C 上的用戶
注意事項:
需要檢查防火墻是否開放對應端口