5 分鐘學會 SSH Config:輕鬆管理你的所有伺服器金鑰

很多人為了方便管理,會把預設的 SSH 私鑰檔名從 id_rsa 改成更有辨識度的名稱,例如 id_rsa_personal。沒想到改完名後,原本可以秒連的伺服器突然都跳出權限錯誤。這不是因為金鑰失效,而是因為 SSH 客戶端「迷路」了。

為什麼改名後會連線失敗?

SSH 客戶端在發起連線時,預設只會自動尋找幾個固定名稱的檔案,像是 id_rsaid_ecdsa 或 id_ed25519。一旦你將檔案改名,原本依賴自動偵測的機制就會找不到對應的私鑰,導致連線被拒絕。

要修復這個問題,你不需要把檔名改回去,而是要學會使用 SSH 的「地圖」——也就是 config 檔案。

使用 Config 建立通用對應規則

你可以透過編輯 ~/.ssh/config 檔案,告訴 SSH 客戶端你的金鑰躲在哪裡。請在該檔案中加入以下設定:

Host *
  IdentityFile ~/.ssh/id_rsa_personal

這段設定的意思是:無論連線到哪一個網域(Host *),如果找不到特定的金鑰,就統一嘗試使用這把 id_rsa_personal。這樣一來,原本受影響的站點就能恢復正常連線。

舉例:這就像你在公司設定了一個「預設聯絡人」,不管客戶從哪裡打來,只要沒人接,電話就會自動轉給這個人。

多把金鑰的精確分流做法

如果你手邊有多把金鑰分別對應不同的帳號(例如公司用與私人用),建議採取更精確的分流設定。例如,針對 GitHub 使用特定的金鑰,而其他站點則使用另一把:

Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa_personal

Host *
IdentityFile ~/.ssh/id_rsa_other

透過這種方式,SSH 就會根據你連線的目標,自動選取正確的「鑰匙」開門,再也不用手動指定。

連線診斷與最後提醒

設定好之後,你可以使用 ssh -v 加上目標網域(例如 ssh -v [email protected])來觀察連線過程。在輸出的冗長資訊中,你會看到 SSH 開始嘗試載入你指定的 IdentityFile

在 Linux 或 WSL 的環境下,系統對金鑰檔案的安全性要求很高。如果你改名後檔案的權限跑掉了,系統會覺得這把鑰匙太危險而拒絕使用。

請檢查你的金鑰權限是否維持在 600(這代表只有你自己可以讀寫)。你可以輸入指令檢查,如果權限不對,連線是絕對不會成功的。

如果你平常有在使用 ssh-agent(這是一個幫你在背景管理鑰匙、讓你不用每次都輸入密碼的小工具),光是改掉檔案名稱是不夠的。

因為管理員的記憶中存的還是舊的名字。改名後,請記得執行 ssh-add ~/.ssh/id_rsa_personal(這裡的檔名請換成你修改後的名字),手動將新檔名的金鑰重新載入到記憶體中,這樣連線時系統才抓得到正確的鑰匙。

結語

管理 SSH 金鑰不該是一件痛苦的事。透過 ~/.ssh/config 檔案,我們不僅能自由為金鑰命名,還能優雅地處理多個帳號的分流連線。下次遇到連線問題時,先檢查一下你的「地圖」(config)設定是否正確吧!

發佈留言

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