從外網 SSH 進局域網,反向代理+正向代理解決方案

相信不少同窗都會碰到這樣一個問題。在實驗室有一臺機器用於平常工做,當我回家了或者回宿舍以後由於無法進入內網,因此訪問不到了。若是這個時候我須要 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

環境需求

  • 每臺機器上都須要 SSH 客戶端
  • A、B 兩臺機器上須要 SSH 服務器端。一般是 openssh-server。代理

    在 Ubuntu 上安裝過程爲code

    bashsudo apt-get install openssl-server

實施步驟

  1. 創建 A 機器到 B 機器的反向代理【A 機器上操做】server

    bashssh -fCNR <port_b1>:localhost:22 usr_b@B.B.B.B

    <port_b1> 爲 B 機器上端口,用來與 A 機器上的22端口綁定。ssl

  2. 創建 B 機器上的正向代理,用做本地轉發。作這一步是由於綁定後的 端口只支持本地訪問【B 機器上操做】get

    bashssh -fCNL "*:<port_b2>:localhost:<port_b1>' localhost

    <port_b2> 爲本地轉發端口,用以和外網通訊,並將數據轉發到 <port_b1>,實現能夠從其餘機器訪問。openssl

    其中的*表示接受來自任意機器的訪問。反向代理

  3. 如今在 C 機器上能夠經過 B 機器 ssh 到 A 機器

    bashssh -p <portb2> usra@B.B.B.B

至此方案完成。

附:

SSH 參數解釋

-f 後臺運行
-C 容許壓縮數據
-N 不執行任何命令
-R 將端口綁定到遠程服務器,反向代理
-L 將端口綁定到本地客戶端,正向代理
相關文章
相關標籤/搜索