通過堡壘機透明連線到雲中任意內網主機

hedzr發表於2019-01-18

通過堡壘機透明連線到雲中任意內網主機,且自由切換到其他主機。

適合於各種公有云環境。

通過堡壘機透明連線到雲中任意內網主機

前置條件

你的SSH證書在每一臺主機上都有相同的賬戶名以及控制檯登入授權。

這一點其實不怎麼容易,比較可行的方法有:

  • 通過自定義映象預先做好賬戶名,並用該映象開機
  • 通過一套ops指令碼集,在每臺主機上執行一次特定子功能以便建立相同的賬戶名以及授權
  • 通過 Ansible/Puppet 或類似的部署工具,執行專用指令碼以便建立賬戶名

關於前置條件的實現,不在本文的討論範疇,因此這裡不再展開細節了。

本機

你的工作主機需要有一點準備:請修改 ~/.bashrc 追加如下語句:

ssh -add -K ~/.ssh/id_rsa
alias ssh='ssh -A'
# 重新登入到終端,或者就地應用變更:
. ~/.bashrc
複製程式碼

以上我們假定你的主力 SSH 證書就是當前賬戶的預設證書,否則你需要指定正確的證書路徑。

上面的語句將會在 SSH 會話中攜帶你的證書到任意位置,當然你也並不必擔心證書的洩露問題,你的證書只會存在在記憶體中。

堡壘機

假定前置條件是滿足的,例如已經在某個新的 VPC 中準備好了自定義映象,並且新開第一臺主機作為堡壘機,並且主機名命名為 cx1ops00,那麼

ssh cx1ops00
複製程式碼

應該能順利登入到該主機。

堡壘機需要開啟SSH轉發,可以修改堡壘機的 /etc/ssh/ssh_config 加入:

Host cc*
    ForwardAgent yes
複製程式碼

也可以建立 ~/.ssh/config 加入該配置。

其它內網主機

你可以繼續開其它主機,這些主機都命名為 cc1xxxxxx,注意每臺主機的主機名和IP地址需要被寫入堡壘機的 /etc/hosts 檔案中,或者是寫入到內網 DNS 伺服器中。一般來說,我們通過新建主機時的使用者自定義啟動指令碼來完成該工作。

回到本機

我們現在需要完成萬用字元配置,修改 ~/.ssh/config 加入如下的配置文字:

Host cc*
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/qcloud/tencent-cloud-newEcsDefault.dms
    ProxyCommand ssh cx1ops00 exec nc %h %p
複製程式碼

一樣的道理,證書檔案的路徑你自己修正正確。

通過上面的萬用字元配置,我們約定凡是ssh到雲主機名 cc* 的,一律藉助堡壘機 cx1ops00 轉發到雲端,至於確切的雲主機名的正確解釋,則交到堡壘機上去完成。因此,現在在本機上通過 ssh cc1web01 可以直接連線到雲上的內網主機了。

通過堡壘機的連線,有一張圖,暫時沒有尋找到原始來源:

通過堡壘機透明連線到雲中任意內網主機

後記

上面的方法,是用在我工作中的方法。DevOps 中 Ops 的基礎的基礎,就是如何便利地在各主機中巡航。

相關文章