mac上ssh免密登录的关键是将私钥passphrase存入钥匙串并配置ssh-agent联动:执行eval "$(ssh-agent -s)"和ssh-add --apple-use-keychain ~/.ssh/id_rsa(或id_ed25519),勾选“始终允许”;再将两行自动加载命令加入~/.zshrc。
mac 上 ssh 登录每次输密码,不是因为没配密钥,而是私钥带 passphrase 却没让钥匙串记住它。真正起作用的是把私钥的密码存进钥匙串,并让 ssh-agent 联动调用——这样只需首次输入一次,后续所有 git push、ssh user@host、vscode 远程连接都自动通过。
关键点:不是存“SSH 登录密码”,而是存“私钥的 passphrase”
✅ 正确操作:把私钥加进钥匙串并启用自动加载
打开终端,依次执行:
eval "$(ssh-agent -s)" ssh-add --apple-use-keychain ~/.ssh/id_rsa
或如果你用的是 Ed25519 密钥(推荐):
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
执行第二条命令时会弹出图形密码框,输入一次你的私钥 passphrase,勾选“始终允许”或“在钥匙串中保存”,完成后就永久生效。
? 注意:
--apple-use-keychain是 macOS 特有参数,旧版命令ssh-add -K已被弃用(macOS 13+ 不再支持),必须用这个新版写法。
? 补充配置:确保每次终端启动自动生效
仅运行一次不够,新开终端还得重来。把下面两行加到你的 shell 配置文件里(如 ~/.zshrc):
export SSH_AUTH_SOCK="$(/usr/bin/ssh-agent -s | grep 'SSH_AUTH_SOCK' | cut -d' ' -f4)" ssh-add --apple-use-keychain ~/.ssh/id_rsa 2>/dev/null
保存后执行 source ~/.zshrc,之后所有新终端都会自动载入私钥。
? 常见失败原因和修复
- 私钥权限太宽松 → 执行
chmod 600 ~/.ssh/id_rsa - 公钥没正确部署到服务器的
~/.ssh/authorized_keys→ 用ssh-copy-id user@host快速推送 - 钥匙串里已有冲突项 → 打开「钥匙串访问」App,搜索
id_rsa或ssh,删掉旧的登录项再重试 - 用了错误路径 → 确认私钥真实路径:
ls -l ~/.ssh/,常见的是id_rsa、id_ed25519或自定义名(如github_key),记得替换命令中的路径
? 额外提示:Git 操作也受益
一旦 ssh-add --apple-use-keychain 成功,所有基于 SSH 的 Git 操作(git pull、git push、GitHub/GitLab/自建仓库)都不再弹密码框。无需额外配 git config credential.helper——那是针对 HTTPS 协议的,和 SSH 无关。
不复杂但容易忽略











