利用Windows 10自带的OpenSSH配置Git

Windows 10 1709之后,系统中默认会安装OpenSSH客户端,并且加入了环境变量:

系统环境变量

才更新的时候,导致了Git工作不正常,即每次拉取都需要输入SSH Key的passphrase。按照以往的习惯和教程,都会在Shell(Bash、PowerShell)启动的时候,运行一下ssh-agent,并手动输入一次passphrase即可。而更新后,由于环境变量的缘故,git运行的是C:\Windows\System32\OpenSSH中的ssh,不知道什么原因找不到Shell启动的ssh-agent,导致每次都需要输入passphrase。

解决方法就是让git使用系统自带的OpenSSH,并且设置OpenSSH的服务为自启动。

Git修改~/.gitconfig文件,设置sshCommand

[core]
	sshCommand = \"C:/Windows/System32/OpenSSH/ssh.exe\"

并且,配置ssh-agent服务为自启动,默认情况下该服务被禁用:

ssh-agent服务

之后,通过ssh-add将远程仓库的key添加至ssh-agent,并输入passphrase即可。好处是passphrase只需要输入一次,Windows会使用DPAPI将passphrase保存至注册表,坏处是当机器沦陷后,可以将passphrase读出,参考[2]

Tips:

  • 如果删除了已添加的SSH Key,需要运行ssh-add -D删除全部SSH Key,再重新添加新的SSH Key,否则ssh-agent会因为找不到之前的文件而终止添加新的SSH Key
  • SourceTree依然会使用git for Windows自带的ssh,并且无法设置SSH路径。Issue已经提交,但目前没有更新。

参考

发表评论