https://blog.csdn.net/weixin_36394852/article/details/72725505#commentBox
實際情況:兩臺服務器:inner - 內部服務器,無公網IP, outter - 有公網IP
目標:實現任何地點都能ssh連接到inner服務器
解決方案: inner機器做反向代理,outter做正向代理,最終由outter對外提供inner的服務
代理參數說明
反向代理:ssh -fCNR
正向代理:ssh -fCNL
參數:(大小寫敏感)
-f 後臺執行ssh指令
-C 允許壓縮數據
-N 不執行遠程指令
-R 將遠程主機(服務器)的某個端口轉發到本地端指定機器的指定端口
-L 將本地機(客戶機)的某個端口轉發到遠端指定機器的指定端口
-p 指定遠程主機的端口
示例:
一 在inner機器建立反向代理
建立inner機器到outter機器的反向代理,具體指令爲
ssh -fCNR [outter_IP或省略]:[outter_port]:[inner_IP]:[inner_port] [登陸outter機器的用戶名@服務器IP]
在這裏我使用了outter機器的8887端口,以及inner機器的22端口,按照上面的指令就是這樣子的操作
令 inner_ip = 192.168.3.17 outter_ip = 1.2.3.4
ssh -fCNR 8887:127.0.0.1:22 [email protected]
注意 127.0.0.1 不要使用localhost,不然可能導致 channel 2: open failed: connect failed: Connection refused 錯誤
檢測進程是否啓動成功:
ps -ef | grep ssh
最好設置爲開機啓動,將命令 ssh -fCNR 8887:127.0.0.1:22 [email protected] & 添加到 /etc/rc.local,同時需要將inner機器設置爲免密登陸outter機器,具體做法參照另一篇博文
二 在outter機器建立正向代理,用來做轉發
具體指令爲
ssh -fCNL [inner_IP或省略]:[inner_port]:[outter_IP]:[outter_port] [登陸outter機器的用戶名@outter_IP]
監聽outter的8888端口,然後轉發到本機的8887端口,注意8888端口需要開放出來,不然外部無法訪問到該端口
ssh -fCNL *:8888:127.0.0.1:8887 127.0.0.1
查看進程 ps -ef | grep ssh
查看端口 ss -tnl | grep 88
一切正常
任意機器遠程ssh:
ssh -p8888 outter_username@outter_Ip
大功告成!
進階版