本篇文章更新時間:2023/07/20
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
如果你有下面這樣其中一個情境,本篇筆記就很適合你!
- 管理很多 Linux 伺服器主機
- 會在非自己主機上部署 Git 版控專案
- 不想在多人協作的 VPN 主機上留下自己的金鑰
簡單來說這個「Agent Forwarding」代理轉送功能,就是可以幫你把本機端(通常就是指你常用的個人電腦)使用的 SSH 金(私)鑰(Private key)轉送到你正在遠端操作的終端上。
而這個轉送不是將私鑰複製進去那個遠端作業主機,僅只是在這個連線的過程中記住了本機給的環境參數。
有使用金鑰連線遠端主機經驗的使用者,直覺一點的做法通常就是開一台主機就配一個金鑰去授權,然後又把主機那對金鑰拿去註冊 GitHub,如此一來每台機器都要在 GitHub 上設定一組。
如果是只有自己管理,那倒是無所謂,想省事一點就是可以使用 Agent Forwarding 轉送機制處理:
ssh-add --apple-use-keychain YOUR-KEY-PATH
Mac 重開會忘記這個設定,可以加上
--apple-use-keychain
來記憶。(參考 GitHub 文件)
先加入那把私鑰,驗證有無成功可以使用 ssh-add -L
查看。
加入完成後,接下來只要有帶上「指令式 -A
」或「設定檔案式 ForwardAgent yes
」,就會把剛剛加入的金鑰一起帶過去該次連線中使用。
也就是:
- 指令:
ssh -A user@host
~/.ssh/config
設定檔案:Host target HostName host_ip User mxp ForwardAgent yes
這兩種方式。
到這邊,網路上大多找到的資訊都已經寫爛了,我只是想補一下一個使用情境:「如果切換成其他使用者角色,例如 root 的話怎辦?」
要使用 sudo -E su
這指令把環境變數給帶過去才可以保持轉發的操作。不然預設 sudo su
這樣的切換會把變數 SSH_AUTH_SOCK
改寫過導致失效。
同時也要知道使用這個轉發有風險,過去有文獻的討論 SSH Agent Forwarding considered harmful 與 Security Issues With Key Agents ,因為會在主機上開一個檔案記錄這件事,而那個檔案就是代表你的授權,所以如果主機上有最高管理權限的人想作惡,他就可以模擬也使用這個檔案來重現你的請求,取得某個可能的遠端主機權限。
假設只是提取某個 GitHub 專案的話,畢竟程式碼也會在該台主機上,就還好。但如果是要已此來跳某台主機遠端操作的話,就建議使用先前筆記過的 ProxyJump
機制了。
如果管理很多主機的話,ProxyJump
可以安全地從跳板跳這些主機,而如果把 config
放在跳板主機內的話,就是可以使用 ForwardAgent
,把這機制使用在自建的跳板主機(Bastion host)上,也不用把這些金鑰都上傳跳板主機,而且好處是把 config
檔案維護在跳板主機上,就算出門用手機要連上某主機簡單作業也不會卡在金鑰的配置問題,兩種管理的使用情境都各有利弊!