在 Mac 上用 SSH 私钥登录服务器时,如果私钥本身设置了 passphrase,就会出现一个很常见的情况:每次连接都要输入私钥密码。

这个密码不是服务器密码,而是私钥文件自己的保护密码。它的作用是:就算别人拿到了你的私钥文件,也还需要知道这个 passphrase 才能使用。

想不用每次都输,有两种办法。

推荐:把私钥密码交给 macOS 钥匙串记住

执行:

1
ssh-add --apple-use-keychain "~/.ssh/keys/<private_key_name>"

第一次会让你输入一次私钥密码。输入之后,macOS 会把它保存到钥匙串里,以后连接时由钥匙串自动解锁。

然后确认 ~/.ssh/config 里有类似下面这段配置:

1
2
3
4
5
6
7
8
Host <ssh_alias>
HostName <server_ip>
User <ssh_user>
Port 22
IdentityFile "~/.ssh/keys/<private_key_name>"
IdentitiesOnly yes
AddKeysToAgent yes
UseKeychain yes

这里的意思是:

  • 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
2
3
ssh-add -D
ssh-add --apple-use-keychain "~/.ssh/keys/<private_key_name>"
ssh <ssh_alias>

不推荐:直接移除私钥密码

这招最省事,但安全性会下降。

因为移除 passphrase 之后,私钥文件就变成了“拿到文件就能登录”。如果这个文件泄露,别人不需要再输入任何私钥密码。

执行:

1
ssh-keygen -p -f "~/.ssh/keys/<private_key_name>"

它会依次询问:

1
2
3
Enter old passphrase:
Enter new passphrase:
Enter same passphrase again:

第一行输入旧密码。后面两次直接回车留空,就移除了私钥密码。

结论

Mac 上优先用钥匙串,不要裸奔私钥。

可直接执行:

1
ssh-add --apple-use-keychain "~/.ssh/keys/<private_key_name>"

本站由 Naiba 使用 Stellar 1.33.1 主题创建。 文章默认采用 CC BY-NC-SA 4.0 许可协议。