最近我重新整理了一下自己电脑上的 Git SSH 配置,顺手也想清楚了一个以前一直有点纠结的问题:
私钥到底要不要设置密码?
不设密码,git pull、git push 都很顺手;
设了密码,VSCode 或 IDEA 里又经常弹窗让输入,挺烦。
但想了想,私钥毕竟就是自己的身份凭证。
如果没有密码保护,哪天电脑中毒、文件被拷走,别人拿到这把 key,基本就能直接冒充访问仓库。
所以我的结论是:
私钥应该设置密码,但不应该每次都手动输入。
解决办法就是用 ssh-agent。
ssh-agent 是什么?
可以简单理解成一个本地的“钥匙管家”。
第一次使用私钥时,输入一次密码。
之后 ssh-agent 会把解锁后的密钥临时缓存起来。
这样私钥文件本身仍然是加密的,但平时 git pull、git push 不会一直打断。
Windows 上配置
Windows 10 / 11 已经自带 OpenSSH 和 ssh-agent。
先确认 SSH 可用:
| |
查看 ssh-agent 服务状态
| |
然后用管理员 PowerShell 启动 ssh-agent:
| |
再把私钥加入 agent:
| |
第一次会输入私钥密码。 之后可以检查一下:
| |
能看到 key 信息,就说明已经缓存成功了。
Linux 上配置
Linux 上也可以用 ssh-agent,思路和 Windows 一样:
第一次输入私钥密码,之后由 agent 临时缓存。
先启动 ssh-agent:
| |
然后把私钥加入 agent:
| |
查看是否添加成功:
| |
如果想让缓存有过期时间,比如 8 小时后失效
| |
如果用的是桌面版 Linux,比如 Ubuntu、Fedora、Linux Mint,很多时候 GNOME Keyring 或 KDE Wallet 已经接管了 ssh-agent,登录系统后会自动管理密钥。
如果发现每次打开终端都要重新 ssh-add,可以检查一下当前 shell 是否能看到 agent:
| |
有输出一般说明 agent 已经在运行。
VSCode 和 IDEA 配置
VSCode 通常不用特别配置,但建议统一使用 Windows 自带的 OpenSSH:
| |
旧版本 IDEA 里可能有 SSH executable 选项,可以选择 Native;如果的版本里没有这个选项,就直接通过 git config --global core.sshCommand 让 Git 使用 Windows 自带的 OpenSSH。