使用任何軟體創建 SSH 隧道

使用任何軟體創建 SSH 隧道

目前,我們有一些實驗室,除了 Bastion VM 之外,所有實例都位於私有子網路中。因此,開發人員應該創建一個從筆記型電腦到 Bastion 的 SSH 隧道,並創建另一個從 Bastion 到某些微服務的隧道,以便他們可以存取 UI。

過程如下所示:

ssh -i <key>.pem -L <port x>:localhost:<port x> user@<hostname of Bastion>
User logged in to Bastion VM.

ssh -i <key>.pem -L <port x>:<hostname of microservice>:<port of microservice> user@<hostname of microservice>
Now they are able to access UI at http://localhost:<port x>

現在,這對於日常使用來說是相當複雜/耗時的任務,因此我正在考慮設定可以配置為一鍵執行相同操作的軟體。

我發現保護管道,但不確定如何將其用於我的目的。有人可以建議使用其他軟體來實現上述目標的替代方案嗎?

答案1

它很複雜,因為你正在以複雜的方式來做這件事。 OpenSSH 已經有簡化這種頻繁連線的機制。 (筆記:這篇文章假設開發者擁有私鑰兩個都本機上的連接,即堡壘主機不保存一些不可複製的憑證。

首先找到一種方法將其壓縮為一個 SSH 命令。這實際上稍微逆轉了隧道,因為堡壘主機現在中繼 SSH 連線而不是 Web 連線。

ssh -i <key>.pem -o ProxyCommand="ssh -i <key>.pem -W %h:%p user@<bastion>" -L <portX>:<microservice>:<mport> user@<hostname>

在最新的 OpenSSH 版本中,可以使用-J/JumpHost代替手動 ProxyCommand 進一步簡化:

ssh -i <key>.pem -J user@<bastion> -L <portX>:<microservice>:<mport> user@<hostname>

現在將其轉換為 ~/.ssh/config 選項 - 確定連接到堡壘主機本身所需的選項、適用於服務主機的選項以及所有這些主機通用的選項(“主機”部分接受多個名稱甚至通配符):

Host <bastion>
    User <user>
    IdentityFile <key>.pem

Host <hostname>
    User <user>
    IdentityFile <key>.pem
    #JumpHost <bastion>
    ProxyCommand ssh -W %h:%p <bastion>

有了這個(可以集中部署),您的命令就變成了:

ssh -L <portX>:<microservice>:<mport> <hostname>

(還有一種方法可以自動附加公司網域,例如,如果伺服器名稱為 svc1.dev.example.com,則Hostname %h.dev.example.comCanonicalDomains dev.example.com會讓您運行ssh svc1。)

這與通用方法一樣簡單 - 其餘四個參數本質上是可變的(取決於每個開發人員的需求),因此即使您在頂部添加圖形 UI,用戶也需要提供相同數量的信息。 (它可以在任何作業系統上與 OpenSSH 搭配使用。)

也就是說,如果相同的每次都建立隧道,也可以在~/.ssh/config中編碼(-L對應LocalForward),開發者只需執行即可ssh <hostname>

(實際上,任何能夠運行 OpenSSH 的作業系統也支援腳本,通常以 sh/bash 和/或命令別名編寫。)

相關內容