ssh反向代理實現NAT內網穿透[ssh版teamviewer]

NO IMAGE

由於實驗室伺服器沒有公網IP,如果在校外網的話只能通過teamviewer遠端桌面連線,然而teamviewer的資料傳輸是基於影象的,反應太慢了,所以一直在尋找ssh版的teamviewer,經過谷歌,發現只需要一臺公網伺服器作為中轉站,就可以實現在任何地方登入處於內網的實驗室伺服器,前提是實驗室伺服器要能正常連線外網。

SSH反向代理

假設有兩臺伺服器A和B:A處於內網無公網IP,B是一個雲主機如阿里雲有公網IP,現在手頭上有一臺處於校外網的電腦C,想用ssh登入伺服器A完成一些騷操作,怎麼弄呢?很簡單,原理是讓B建立對A的臨時ssh反向代理通道,然後用C登入B就可以直接ssh進入A了

  1. 首先在A上操作,使用以下語句向B發起反向代理請求(最好root執行),這裡會要求輸入B對應使用者的密碼,執行成功後,會在B的7280埠對映向A的ssh請求(埠22),通過netstat -tnlpps aux | grep ssh檢查A上這條語句執行是否成功

    ssh -fCNR 7280:localhost:22 [email protected]_IP

    具體解釋:

    ssh -fCNR [B機器IP或省略]:[B機器埠]:[A機器的IP]:[A機器埠] [登陸B機器的使用者名稱@伺服器IP]
  2. 然後登入B,若上面語句執行成功的話,我們用netstat -tnlp能檢查到反向代理在埠7280的程序:

    [email protected]_IP:/home/peng# netstat -tnlp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.1.1:5432          0.0.0.0:*               LISTEN      822/postgres
    tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      822/postgres
    tcp        0      0 127.0.0.1:2015          0.0.0.0:*               LISTEN      892/expressvpnd
    tcp        0      0 0.0.0.0:40101           0.0.0.0:*               LISTEN      29955/sshd: peng
    tcp        0      0 0.0.0.0:7280            0.0.0.0:*               LISTEN      30270/sshd: peng
    tcp        0      0 0.0.0.0:7281            0.0.0.0:*               LISTEN      29955/sshd: peng
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      29233/sshd
  3. 測試登入A:先用C登上B,然後在B上執行以下程式碼即可,通過-p指定反向代理的埠7280,ideal是A上的使用者,這裡需要輸入A上此使用者的密碼,若成功,那麼到此就OK了。

    [email protected]_ip:~$ ssh -p 7280 [email protected]
    [email protected]'s password:
    Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-127-generic x86_64)
    * Documentation:  https://help.ubuntu.com
    * Management:     https://landscape.canonical.com
    * Support:        https://ubuntu.com/advantage
    95 packages can be updated.
    0 updates are security updates.
    *** System restart required ***
    Last login: Mon Jul 16 11:49:19 2018 from 127.0.0.1
  4. autossh設定(opt):上面成功的前提是A和B之間的ssh不斷開,一旦斷開,還是需要用teamviwer去A上繼續執行上述命令建立反向代理,那麼我們可以使用autossh工具讓那ssh斷開後自動連線,具體來說在A上安裝autossh工具,然後執行以下語句即可,-M是指定另外一個埠7281用來監測ssh的連線情況的,同樣我們需要檢查A和B上的程序情況,我們更可以把下面語句加入開機自動啟動的指令碼,當然所有前提都是A可以連線外網。

    autossh -M 7281 -fCNR 7280:localhost:22 [email protected]_IP

Reference

https://www.aliyun.com/jiaocheng/131565.html

https://jingyan.baidu.com/article/b7001fe1b68bd70e7282dda5.html