反向 SSH 隧道
我的本地網路上有一個 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 客戶端透明。