通過堡壘機透明連線到雲中任意內網主機,且自由切換到其他主機。
適合於各種公有云環境。
前置條件
你的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 的基礎的基礎,就是如何便利地在各主機中巡航。