VSCode Remote-SSH连接失败:使用Git SSH客户端替代方案
VSCode Remote-SSH连接失败:使用Git SSH客户端替代方案
问题描述
在使用VSCode Remote-SSH插件连接远程服务器时,遇到了连接失败的问题,错误信息为:
WSASendCB - ERROR: broken assumption
kex_exchange_identification: write: eother
过程试图写入的管道不存在
有趣的是,使用PuTTY可以正常连接,但VSCode和Windows命令行中的SSH连接都失败。
问题分析
通过详细的调试信息分析,发现问题出在Windows自带的OpenSSH客户端上。具体表现为:
- 连接可以建立:TCP连接成功建立(显示"Connection established")
- 密钥交换阶段失败:在SSH密钥交换过程中,Windows OpenSSH客户端发送数据时出现网络栈错误
- 兼容性问题:Windows OpenSSH 8.1p1与某些SSH服务器存在兼容性问题
- Windows网络栈问题:错误信息"WSASendCB - ERROR: broken assumption"表明是Windows网络子系统的问题
解决方案
根本原因
Windows自带的OpenSSH客户端存在一些已知的兼容性问题,特别是与某些SSH服务器的密钥交换算法不兼容。
解决方案:使用Git for Windows的SSH客户端
Git for Windows自带了一个更稳定、兼容性更好的SSH客户端。以下是配置步骤:
步骤1:确保已安装Git for Windows
如果没有安装Git for Windows,可以从官网下载并安装:
https://git-scm.com/download/win
步骤2:找到Git的SSH客户端路径(使用 everything 搜索一下就好了)
Git for Windows的SSH客户端通常安装在以下路径之一:
E:\Program Files\Git\usr\bin\ssh.exeC:\Program Files\Git\usr\bin\ssh.exeC:\Program Files (x86)\Git\usr\bin\ssh.exe
步骤3:配置VSCode使用Git的SSH客户端
有几种方法可以配置:
方法一:通过VSCode设置界面(直接设置,我自己测试是起效的)
- 打开VSCode
- 按
Ctrl+,打开设置 - 搜索"remote ssh path"
- 在"Remote SSH: Path"字段中输入Git SSH的完整路径
方法二:直接编辑settings.json
- 打开命令面板 (
Ctrl+Shift+P) - 输入"Preferences: Open Settings (JSON)"
- 添加以下配置:
{
"remote.SSH.path": "E:\\Program Files\\Git\\usr\\bin\\ssh.exe",
"remote.SSH.useLocalServer": false
}
方法三:使用SSH配置文件
如果你需要为特定主机使用不同的SSH客户端,可以在SSH配置文件中指定:
在~/.ssh/config中添加:
Host 192.168.0.125
HostName 192.168.0.125
Port 12222
User your_username
ProxyCommand "E:\Program Files\Git\usr\bin\ssh.exe" -W %h:%p
步骤4:测试连接
配置完成后,重启VSCode并尝试重新连接。你也可以在命令行中测试:
"E:\Program Files\Git\usr\bin\ssh.exe" -T 192.168.0.125 -p 12222
其他可能的解决方案(没有测试过)
方案1:使用PuTTY的plink
如果Git的SSH也不可用,可以使用PuTTY的plink:
{
"remote.SSH.path": "C:\\Program Files\\PuTTY\\plink.exe"
}
方案2:更新Windows OpenSSH
尝试更新Windows自带的OpenSSH到最新版本:
# 以管理员身份运行PowerShell
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
浙公网安备 33010602011771号