[SSH] 設定 Agent Forwarding 機制遠端連線的方法

本篇文章更新時間:2023/07/20
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


如果你有下面這樣其中一個情境,本篇筆記就很適合你!

  1. 管理很多 Linux 伺服器主機
  2. 會在非自己主機上部署 Git 版控專案
  3. 不想在多人協作的 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」,就會把剛剛加入的金鑰一起帶過去該次連線中使用。

也就是:

  1. 指令: ssh -A user@host
  2. ~/.ssh/config 設定檔案:
    Host target
    HostName        host_ip
    User    mxp
    ForwardAgent    yes

這兩種方式。

到這邊,網路上大多找到的資訊都已經寫爛了,我只是想補一下一個使用情境:「如果切換成其他使用者角色,例如 root 的話怎辦?」

要使用 sudo -E su 這指令把環境變數給帶過去才可以保持轉發的操作。不然預設 sudo su 這樣的切換會把變數 SSH_AUTH_SOCK 改寫過導致失效。

同時也要知道使用這個轉發有風險,過去有文獻的討論 SSH Agent Forwarding considered harmfulSecurity Issues With Key Agents ,因為會在主機上開一個檔案記錄這件事,而那個檔案就是代表你的授權,所以如果主機上有最高管理權限的人想作惡,他就可以模擬也使用這個檔案來重現你的請求,取得某個可能的遠端主機權限。

假設只是提取某個 GitHub 專案的話,畢竟程式碼也會在該台主機上,就還好。但如果是要已此來跳某台主機遠端操作的話,就建議使用先前筆記過的 ProxyJump 機制了。

參考:[SSH] 遠端連線透過跳板主機操作的方法

如果管理很多主機的話,ProxyJump 可以安全地從跳板跳這些主機,而如果把 config 放在跳板主機內的話,就是可以使用 ForwardAgent,把這機制使用在自建的跳板主機(Bastion host)上,也不用把這些金鑰都上傳跳板主機,而且好處是把 config 檔案維護在跳板主機上,就算出門用手機要連上某主機簡單作業也不會卡在金鑰的配置問題,兩種管理的使用情境都各有利弊!


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon