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客户端上。具体表现为:

  1. 连接可以建立:TCP连接成功建立(显示"Connection established")
  2. 密钥交换阶段失败:在SSH密钥交换过程中,Windows OpenSSH客户端发送数据时出现网络栈错误
  3. 兼容性问题:Windows OpenSSH 8.1p1与某些SSH服务器存在兼容性问题
  4. 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.exe
  • C:\Program Files\Git\usr\bin\ssh.exe
  • C:\Program Files (x86)\Git\usr\bin\ssh.exe

步骤3:配置VSCode使用Git的SSH客户端

有几种方法可以配置:

方法一:通过VSCode设置界面(直接设置,我自己测试是起效的)
  1. 打开VSCode
  2. Ctrl+,打开设置
  3. 搜索"remote ssh path"
  4. 在"Remote SSH: Path"字段中输入Git SSH的完整路径
方法二:直接编辑settings.json
  1. 打开命令面板 (Ctrl+Shift+P)
  2. 输入"Preferences: Open Settings (JSON)"
  3. 添加以下配置:
{
    "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

其他可能的解决方案(没有测试过)

如果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
posted @ 2026-01-14 13:06  口嗨养生博  阅读(31)  评论(0)    收藏  举报