在 Mac 上用 SSH 私钥登录服务器时,如果私钥本身设置了 passphrase,就会出现一个很常见的情况:每次连接都要输入私钥密码。
这个密码不是服务器密码,而是私钥文件自己的保护密码。它的作用是:就算别人拿到了你的私钥文件,也还需要知道这个 passphrase 才能使用。
想不用每次都输,有两种办法。
推荐:把私钥密码交给 macOS 钥匙串记住
执行:
1 | ssh-add --apple-use-keychain "~/.ssh/keys/<private_key_name>" |
第一次会让你输入一次私钥密码。输入之后,macOS 会把它保存到钥匙串里,以后连接时由钥匙串自动解锁。
然后确认 ~/.ssh/config 里有类似下面这段配置:
1 | Host <ssh_alias> |
这里的意思是:
Host <ssh_alias>:以后可以直接用ssh <ssh_alias>连接。HostName:服务器 IP。User:登录用户名。Port:SSH 端口。IdentityFile:使用哪一个私钥文件。AddKeysToAgent yes:把私钥加入 ssh-agent。UseKeychain yes:让 macOS 钥匙串记住私钥密码。
配置好之后测试:
1 | ssh <ssh_alias> |
如果还是提示输入 passphrase,可以重启一下 ssh-agent 里的记录:
1 | ssh-add -D |
不推荐:直接移除私钥密码
这招最省事,但安全性会下降。
因为移除 passphrase 之后,私钥文件就变成了“拿到文件就能登录”。如果这个文件泄露,别人不需要再输入任何私钥密码。
执行:
1 | ssh-keygen -p -f "~/.ssh/keys/<private_key_name>" |
它会依次询问:
1 | Enter old passphrase: |
第一行输入旧密码。后面两次直接回车留空,就移除了私钥密码。
结论
Mac 上优先用钥匙串,不要裸奔私钥。
可直接执行:
1 | ssh-add --apple-use-keychain "~/.ssh/keys/<private_key_name>" |