最近我重新整理了一下自己电脑上的 Git SSH 配置,顺手也想清楚了一个以前一直有点纠结的问题:

私钥到底要不要设置密码?

不设密码,git pullgit push 都很顺手;
设了密码,VSCode 或 IDEA 里又经常弹窗让输入,挺烦。

但想了想,私钥毕竟就是自己的身份凭证。
如果没有密码保护,哪天电脑中毒、文件被拷走,别人拿到这把 key,基本就能直接冒充访问仓库。

所以我的结论是:

私钥应该设置密码,但不应该每次都手动输入。

解决办法就是用 ssh-agent


ssh-agent 是什么?

可以简单理解成一个本地的“钥匙管家”。

第一次使用私钥时,输入一次密码。
之后 ssh-agent 会把解锁后的密钥临时缓存起来。

这样私钥文件本身仍然是加密的,但平时 git pullgit push 不会一直打断。


Windows 上配置

Windows 10 / 11 已经自带 OpenSSH 和 ssh-agent。

先确认 SSH 可用:

1
ssh -V

查看 ssh-agent 服务状态

1
Get-Service ssh-agent

然后用管理员 PowerShell 启动 ssh-agent:

1
2
Set-Service -Name ssh-agent -StartupType Automatic
Start-Service ssh-agent

再把私钥加入 agent:

1
ssh-add $env:USERPROFILE\.ssh\id_ed25519

第一次会输入私钥密码。 之后可以检查一下:

1
ssh-add -l

能看到 key 信息,就说明已经缓存成功了。

Linux 上配置

Linux 上也可以用 ssh-agent,思路和 Windows 一样:
第一次输入私钥密码,之后由 agent 临时缓存。

先启动 ssh-agent

1
eval "$(ssh-agent -s)"

然后把私钥加入 agent:

1
ssh-add ~/.ssh/id_ed25519

查看是否添加成功:

1
ssh-add -l

如果想让缓存有过期时间,比如 8 小时后失效

1
ssh-add -t 8h ~/.ssh/id_ed25519

如果用的是桌面版 Linux,比如 Ubuntu、Fedora、Linux Mint,很多时候 GNOME Keyring 或 KDE Wallet 已经接管了 ssh-agent,登录系统后会自动管理密钥。

如果发现每次打开终端都要重新 ssh-add,可以检查一下当前 shell 是否能看到 agent:

1
echo $SSH_AUTH_SOCK

有输出一般说明 agent 已经在运行。

VSCode 和 IDEA 配置

VSCode 通常不用特别配置,但建议统一使用 Windows 自带的 OpenSSH:

1
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"

旧版本 IDEA 里可能有 SSH executable 选项,可以选择 Native;如果的版本里没有这个选项,就直接通过 git config --global core.sshCommand 让 Git 使用 Windows 自带的 OpenSSH。