這種SSH Tunnel其實是中繼轉發,並非真正的穿透,實際操作過是可以通的。
環境設定:
A: gsm.com:12345 211.23.2.222
B: 114.35.1.111 192.168.0.123
C: 211.23.2.222 192.168.10.111
NAT B $ autossh -p 22 -M 12345 -NR 12345:localhost:22 user@gsm.com
A $ ssh -p 12345 user@192.168.0.123
C $ ssh -p 12345 user@gsm.com
autossh -M 12345 -NR 12345:localhost:22 user@gsm.com -p 22
autossh -M 5678 -NR 3333:localhost:22 user@gsm.com -p22
ssh -NfR 1113:localhost:22 user@gsttest111.asuscomm.com -p22
機器代號 機器位置 IP地址 賬戶 ssh/sshd 埠 是否需要執行sshd
A(Server) 位於公網 ServerIP userA 22 是
B 位於NAT 之後 localhost(B) userB 22 是
C 位於NAT 之後 localhost(C) userC 22 否
B$ ssh -NfR 1111:localhost(B):22 userA@ServerIP -p22
localhost(B)的(B)只是要表達這裡的localhost是B的localhost,實際下指令是只要寫localhost
參數
R是告訴Server A把傳到A的port 1111的data轉發到B的port 22,如果這邊B的sshd有監聽其它port,也可以把22改成其它port
N 告訴SSH客戶端,這個連線不需要執行任何命令,僅僅做埠轉發。
f 告訴SSH客戶端在後臺執行。
A$ ssh localhost(A) -p 1111
如果要從C傳data到A的port 1111再由A轉發給B,需要在sshd 的配置檔案/etc/ssh/sshd_config,將GatewayPorts 開關開啟:
GatewayPorts yes
C$ ssh localhost(C) -p 1111
將本地機(客戶機)的某個埠轉發到遠端指定機器的指定埠:
本地機器上分配了一個 socket 偵聽 port 埠, 一旦這個埠上有了連線, 該連線就經過安全通道轉發出去, 同時和遠端主機的host:hostport 埠建立連線.
在本機內網ip下執行
sudo ssh -i /home/user/Project/tunnel/ssh/id_rsa -N -f -L 2222:35.185.157.173:22 35.185.157.173
sudo ssh -i /home/user/Project/tunnel/ssh/id_rsa localhost -p 2222
將遠端主機(伺服器)的某個埠轉發到本地端指定機器的指定埠:
遠端主機上分配了一個 socket 偵聽 port 埠, 一旦這個埠上有了連線, 該連線就經過安全通道轉向出去, 同時和本地主機的host:hostport 埠建立連線.
在本機內網ip下執行
sudo ssh -i /home/user/Project/tunnel/ssh/id_rsa -N -f -R 2223:127.0.0.1:22 35.185.157.173
在遠端主機上執行
sudo ssh -p 2223 user@localhost
登錄遠端主機
在本機內網ip下執行
sudo ssh -i /home/user/Project/tunnel/ssh/id_rsa -N -f -L 2222:35.185.157.171:22 35.185.157.171
sudo ssh -i /home/user/Project/tunnel/ssh/id_rsa localhost -p 2222
從遠端主機上連回本機
在本機內網ip下執行
sudo ssh -i /home/user/Project/tunnel/ssh/id_rsa -N -f -R 2223:127.0.0.1:22 35.185.157.171
在遠端主機上執行
sudo ssh -p 2223 user@localhost
查看sshd監聽狀態
sudo netstat -lnput | grep ssh
REF
SSH的埠轉發:本地轉發Local Forward和遠端轉發Remote Forward
沒有留言:
張貼留言