Published on

使用 Apple 的 Keychain 保存 SSH 的 passphase

Authors

SSH 的私钥是非常重要的数据,一旦泄露可能回造成非常大的损失,但是我注意到很多开发人员并没有给私钥设置密码,可能是因为觉得麻烦,因为每次使用都要输入密码。

一些恶意的软件或者脚本完全可以扫描到~./ssh/这个目录下的所有文件,这里保存了登陆服务器的私钥和登陆服务器的记录,一旦被不法分子拿到,后果可能超乎想象。

所以,建议给私钥额外添件一个密码,这样即使被坏人拿到,也无法使用。

但是,我们需要在易用性和安全性之间保持一种平衡,即使给私钥加上密码,也没有明显降低易用性,不会要求我们在每次使用的时候都输入密码。

Apple 的 Keychain 是一个支持端到端加密的工具,所以密码保存在里面是安全的。我们只需要在首次使用时,输入:

ssh-add --apple-use-keychain ~/.ssh/id_rsa

这条命令会把密钥交给 ssh-agent 管理,同时密码会自动保存到 Apple 的 keychain 里面。

ssh-agent 是一个守护进程,用来管理 ssh 连接过程中需要的认证信息,以后每次连接的时候就不需要手动输入密码了,同时你的私钥是安全的。

到这一步已经基本接近完美了,但是如果你重启电脑,发现还是需要你输入密码,这是因为 ssh-agent 不能自动从 Apple 的 Keychain 里面加载密码,所以需要在 ~./ssh/config 里写入如下内容:

Host *
  AddKeysToAgent yes

参考资料:

How can I permanently add my SSH private key to Keychain so it is automatically available to ssh? SSH-agent does not automatically load passphrases on the OSX Sierra keychain during startup