利用阿里雲ECS跳板機內網穿透- ssh
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。背景:暴露私網的一台機器,公網可訪問。由於坑爹的電信沒有給固定的公網IP,所以沒法在路由器上配置公網轉寄。網上google後,發現ssh的強大,一條命令搞定。```ssh -fNgR 2222:127.0.0.1:22 101.37.XX.XX ```命令 | 含義---|----R port:host:port | 將遠程機器的連接埠映射到本地。第一個port是遠端伺服器port,第二個port是本地port,ip地址是本地IP-f | 告訴SSH用戶端在後台運行-g | 允許遠程主機可遠端存取,這裡有坑,下面會解釋。-N |Do not execute a shell or command. 不執行指令碼或命令,通常與-f連用。工作原理:1、本地主機和遠程主機建立串連;2、遠程主機上分配了一個 socket 偵聽 port 連接埠;3、遠程連接埠上有了串連, 該串連就經過安全通道轉向原生連接埠。備忘:root 登入遠程主機才能轉寄特權連接埠。 在內網機器上執行上述命令後,netstat可以看見本機和遠程機器已建立ssh的連結。```root@ubuntu:~# ssh -fNgR 2222:127.0.0.1:22 101.37.XX.XX root@ubuntu:~# netstat -anActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 0 192.168.199.195:22 192.168.199.150:63314 ESTABLISHEDtcp 0 0 192.168.199.195:49118 101.37.xx.xx:22 TIME_WAITtcp 0 0 192.168.199.195:49116 101.37.xx.xx:22 TIME_WAIT```登入遠程機器查看```root@iZbp13nxv7jnb572cpnkd8Z:~# lsof -i :2222COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 25903 root 8u IPv4 75873980 0t0 TCP localhost:2222 (LISTEN)```此時在遠程機器直接ssh原生2222連接埠,就可以訪問內網機器了。```ssh 127.0.0.1 -p 2222```似乎這裡一切OK,但是我們需要的是一台跳板機。當換一台其他的ECS串連遠端機器後,發現連結拒絕。其實留心下就發現了,上面lsof查看的時候,監聽的是localhost,其他機器當然無法訪問了。可是我們的ssh參數中明明有-g選項,-g就是明確允許遠程機器可以遠端存取啊。google後發現,運程機器的ssh還需要開啟GatewayPorts yes```#vim /etc/ssh/sshd_config 新增GatewayPorts yes#service ssh restart#kill -9 25903 #殺掉遠程映射的進程,取消連結,進程號可以通過lsof查到```然後在內網機器重新執行上述命令,這裡在遠程機器上查看,監聽的是公網IP,OK了。```root@iZbp13nxv7jnb572cpnkd8Z:~# lsof -i :2222COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEsshd 25853 root 8u IPv4 75871893 0t0 TCP *:2222 (LISTEN)```現在可以在可訪問遠程機器的PC上,ssh 2222連接埠,從而訪問內網的機器了。``` ssh root@101.37.XX.XX -p 2222 #實際訪問的是內網機器```194 次點擊 ∙ 1 贊