Ubuntu

反向 SSH 隧道

  • August 12, 2016

我的本地網路上有一個 gitlab 伺服器和一個可以從網路外部通過 ssh 訪問的伺服器。

有沒有一種方法可以配置伺服器,我可以通過 SSH 進入,這樣當我使用時:

ssh git@git.mypublicserver.com

它將它發送到本地網路上的 Gitlab 伺服器?有點像 Nginx 反向代理,但帶有 ssh。

編輯:

我一直在環顧四周,在這裡發現了一些我想要的東西。

通過負載均衡器訪問

如果您想提供更標準的 git 體驗,您可以手動 > 設置和配置外部負載均衡器以指向給定的 GitLab 節點。這應該將流量從埠 22 路由到 > GitLab 節點上的埠 2222。然後,您可以將 DNS 記錄指向負載均衡器。

這看起來像我想要做的,但我該如何做到這一點?

編輯2:

這是一張圖片,希望可以闡明我正在嘗試做的事情。

(那些紅線也應該通過網際網路。)

圖表

像 nginx 這樣的 HTTP 伺服器能夠基於主機名進行代理,因為它是在請求的 HTTP/1.1 主機頭中發送的。SSH 沒有虛擬主機這個概念,客戶端根本不發送主機名。

你有三個選擇:

  • 使用埠轉發使您的 gitlab 伺服器直接可用。
  • 通過(額外的)IPv4 或 IPv6 地址使您的 gitlab 伺服器可用。
  • 在您的網路中創建一個 SSH 隧道,並通過此隧道將 SSH 連接代理到您的 git 伺服器。

轉發埠

這可能是乾擾“公共伺服器”的最簡單方法。設置網關以將埠 2222 轉發到 192.168.2.26:22。然後使用ssh -p2222 git@git.example.com連接。對於git,請使用諸如ssh://git@git.example.com:2222/repo.git.

或者,您可以只使用ssh://git@git.example.com/repo.git或者git@git.example.git:repo.git如果您創建一個~/.ssh/config文件:

Host git.example.com
   Port 2222

額外的 IPv4 或 IPv6 地址

如果您有家庭網路,獲得 IPv4 地址可能是不可能的,但一些業務提供商會這樣做。如果您的網路支持 IPv6(端到端),那麼您可以只使用普通路由而無需討厭的代理或 NAT 黑客。

SSH隧道

您可以使用該ProxyCommand選項指定將 SSH 連接代理到git.example.com. 在您的情況下,“公共伺服器”是代理,因此該命令應該連接到該伺服器。

讓我們從配置片段開始~/.ssh/config

Host git.example.com
   ProxyCommand ssh -W %h:%p username@example.com

在此程式碼段中,該-W %h:%p選項將擴展為-W git.example.com:22並將標準輸入和輸出重定向到所述主機(git.example.com)。這使您的本地 SSH 客戶端能夠與您的 gitlab 伺服器對話。您可以再次使用任何 URL,如git@git.example.com:repo.git,代理將對 git 客戶端透明。

引用自:https://unix.stackexchange.com/questions/302928