相信不少同窗都會碰到這樣一個問題。在實驗室有一臺機器用於平常工做,當我回家了或者回宿舍以後由於無法進入內網,因此訪問不到了。若是這個時候我須要 SSH 進去作一下工做,那麼怎麼解決這個問題呢?本文將給出一種使用 SSH 的代理功能的解決方案。bash
機器號 | IP | 用戶名 | 備註 |
---|---|---|---|
A | 192.168.0.A | usr_a | 目標服務器,在局域網中,能夠訪問 A |
B | B.B.B.B | usr_b | 代理服務器,在外網中,沒法訪問 A |
C | - | - | 能夠直接訪問 B,沒法直接訪問 A |
從 C 機器使用 SSH 訪問 A服務器
在 A 機器上作到 B 機器的反向代理;在 B 機器上作正向代理本地端口轉發ssh
A、B 兩臺機器上須要 SSH 服務器端。一般是 openssh-server。代理
在 Ubuntu 上安裝過程爲code
bashsudo apt-get install openssl-server
創建 A 機器到 B 機器的反向代理【A 機器上操做】server
bashssh -fCNR <port_b1>:localhost:22 usr_b@B.B.B.B
<port_b1>
爲 B 機器上端口,用來與 A 機器上的22端口綁定。ssl
創建 B 機器上的正向代理,用做本地轉發。作這一步是由於綁定後的 端口只支持本地訪問【B 機器上操做】get
bashssh -fCNL "*:<port_b2>:localhost:<port_b1>' localhost
<port_b2>
爲本地轉發端口,用以和外網通訊,並將數據轉發到 <port_b1>
,實現能夠從其餘機器訪問。openssl
其中的*
表示接受來自任意機器的訪問。反向代理
如今在 C 機器上能夠經過 B 機器 ssh 到 A 機器
bashssh -p <portb2> usra@B.B.B.B
至此方案完成。
附:
-f 後臺運行 -C 容許壓縮數據 -N 不執行任何命令 -R 將端口綁定到遠程服務器,反向代理 -L 將端口綁定到本地客戶端,正向代理