VSCODE Remote SSH 下无法执行 git ssh 通讯
相关信息
省流:试试重装 git for windows,选择使用 git for windows 自带的 OpenSSH 而不是操作系统内置的 OpenSSH.
今天花了若干小时,解决或者说发现了这个坑。
本地环境:使用 VS Code 的 Remote SSH 插件,连接到另外一台 Windows 计算机,编辑一个远程地址是ssh的git仓库,仓库是公钥访问。
远程环境:Win 11 LTSC, 系统自带 Open SSH 服务端,公钥登录,非管理员账户。使用 Powershell Core 作为默认 Shell,安装了 Git。具体的环境搭建过程在这里。
看起来都挺正常的哈?
然后,我打开了一个项目,在 vscode 中打开终端,执行 git pull,结果报错……报错就好了,这玩意儿就那么挂着了,等了几分钟还是没反应。从 vscode 的 git 模块图形化执行,问题一样。
怕是机器上一个需要密码的私钥作怪,就暂时删了私钥,一样的。
执行$env:GIT_SSH_COMMAND = 'ssh -vvv'
,再执行 git pull,日志有那么一些,但都不是报错。日志的最后一句是:
debug2: exec request accepted on channel 0
然后这玩意儿就静静地在那里等着我 Ctrl+C ……
然后就是排查,各种东西试了一遍。github 上 vscode 的仓库里面也有两个帖子说这事,有些是私钥带密码的原因(是的,这个至今,2025年4月6日,还没解决!), 有些似乎是跟 vscode 配置有关,有些没有结论,总之无效。
跟 Deepseek 商量着,研究了一些环境变量,做了一些测试,没啥作用。
到最后我想着手动执行一下ssh-agent
,结果,确实报错了,可能是服务没有开,但开了之后仍然报错。 这个没啥参考价值,但在干这个的过程中,我想到,会不会是微软提供这套东西压根就不靠谱啊!
给系统替换 Open SSH 是很麻烦的,但是替换一下 git 所使用的并不复杂,就是下载个安装包重装。 之前我习惯让 git 使用 Windows 自带的 Open SSH,但此时为了排查问题当然要试试 git 自带的Open SSH,也就是装完了之后 git 目录里面有一个自己专用的 ssh.exe 文件。
结果,就™这样好了,从 vscode remote ssh 环境下,执行 git pull 完全正常。图形化操作也是正常的。
对了,之前其实也不是完全不能用。直接用微软的 ssh 客户端连接(不经过 vscode remote ssh 插件)也是可以的; 甚至,在 vscode remote ssh 环境下,开一个终端,在这个终端里面 ssh 到 127.0.0.1 连接到这台远程计算,也是可以的。
所以,这到底是 vscode 的锅,还是系统自带的Open SSH 的锅?不过,总之微软的锅是没跑了。