相信很多同學都會碰到這樣一個問題。在實驗室有一臺機器用於日常工作,當我回家了或者回宿舍之後因爲沒法進入內網,所以訪問不到了。如果這個時候我需要 SSH 進去做一下工作,那麼怎麼解決這個問題呢?本文將給出一種使用 SSH 的代理功能的解決方案。
問題描述:
https://segmentfault.com/a/1190000002718360
機器狀況
機器號 | 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 上安裝過程爲
sudo apt-get install openssl-server
實施步驟
建立 A 機器到 B 機器的反向代理【A 機器上操作】
ssh -fCNR <port_b1>:localhost:22 [email protected]
<port_b1>
爲 B 機器上端口,用來與 A 機器上的22端口綁定。建立 B 機器上的正向代理,用作本地轉發。做這一步是因爲綁定後的 端口只支持本地訪問【B 機器上操作】
ssh -fCNL "*:<port_b2>:localhost:<port_b1>' localhost
<port_b2>
爲本地轉發端口,用以和外網通信,並將數據轉發到<port_b1>
,實現可以從其他機器訪問。其中的
*
表示接受來自任意機器的訪問。現在在 C 機器上可以通過 B 機器 ssh 到 A 機器
ssh -p <portb2> [email protected]
至此方案完成。
附:
SSH 參數解釋
-f 後臺運行-C 允許壓縮數據-N 不執行任何命令-R 將端口綁定到遠程服務器,反向代理-L 將端口綁定到本地客戶端,正向代理