全部文章

恢復MacOS Sierra的ssh密鑰自動加載行為

作為Git使用者,經常需要與遠程服務器打交道。我一般使用git+ssh協議傳輸更新。這種方式相比於https的好處是不用輸入密碼。因為在服務端上傳了我的公鑰,而本地端ssh也配置了對應的私鑰。我之前執行過一個命令ssh-add -K <private key file>-K這個參數告訴它可以在Keychains中保存密鑰的密碼,這樣每次使用密鑰時都不用手工再輸入密碼了。如此配置好後,每次在git倉庫推送更新給遠端只需要執行git push origin,相當方便。

可是一次更新Mac系統後,這個方法不再有效了。執行前面的命令會返回一個錯誤,說明無訪問權限。這暗示ssh沒有配置相應的私鑰。網絡上搜索解決方案後,才得知原來蘋果公司在Mac Sierra版本中更改了ssh的行為,它不再自動加載存儲在鑰匙串(Keychain)中(通過ssh-add -K添加)的密鑰。官方對此有一個回應,說明不是一個漏洞,而是官方刻意為之。

那麼,如何才能像之前那樣便利呢?這裡列出了解決方案。我參考後選用了最好的一種。創建一個ssh配置文件~/.ssh/config包含以下內容

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

可選地替換~/.ssh/id_rsa為您的密鑰的路徑。要添加其他密鑰,請為每個密鑰添加一行:IdentityFile /path/to/your_key

參考文獻:

Revert ssh-agent behavior pre macOS Sierra

發表於2017年5月3日