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

由於實驗室服務器沒有公網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 aliyun_user@aliyun_IP

    具體解釋:

    ssh -fCNR [B機器IP或省略]:[B機器端口]:[A機器的IP]:[A機器端口] [登陸B機器的用戶名@服務器IP]
  2. 然後登錄B,若上面語句執行成功的話,我們用netstat -tnlp能檢查到反向代理在端口7280的進程:

    root@aliyun_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了。

    peng@aliyun_ip:~$ ssh -p 7280 ideal@127.0.0.1
    ideal@127.0.0.1'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 aliyun_user@aliyun_IP

Reference

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章