看SO上说,私钥设置密码的原因是如果私钥被别人access了,至少还有最后一道防线。
其实这个说法挺牵强的,因为私钥在设计上本来就应该是见光死的,被人看到了就是万策尽。给私钥加上一个密码反而还需要人去记忆这个密码,也就是偏离了使用keypair进行认证的本质。
用户会想尽办法摆脱再输入一次密码的痛苦,想方设法地使用各种工具保存密码,最终还是失去了给私钥上密码的意义。
总之,在Win下倒腾了大半个下午,终于把整体的流程搞清楚了,在此记录一下:
私钥含有密码(不然就是加密的)->使用此私钥需要先使用密码进行解密->git,openSSH可以帮助我们记录密码,省去这个步骤(下述展示使用openSSH的做法)
首先,启用openSSH服务端:开始 > 服务 > 找到“openSSH Authentication Agent” > “启动类型”选择自动(延迟启动)
否则将找不到ssh agent:
> ssh-add Error connecting to agent: No such file or directory
此时就可以在命令行使用ssh-agent
,ssh-add
之类与Linux等价的命令了。
> ssh-add <file-to-private-key>
输入一次密码之后,openSSH会记住这个私钥的密码,就不必再输入了。笔者使用的VScode应当是调用openSSH连接远程服务器,所以执行此命令之后,VScode不再提示输入私钥的密码。
查看ssh-agent都记住了哪些私钥的密码:
> ssh-add -l 3072 (redacted) (RSA)
如需删除私钥的密码,则需使用其对应的公钥,这个公钥可以通过ssh-keygen
进行导出:
> ssh-keygen -y -f /path/to/private/key > ssh-add -d /path/to/public/key
此时还需要再输入一次私钥的密码= =