VScode通过remote ssh连接虚拟机 & 报错 过程试图写入的管道不存在(已解决)

本文详细介绍了在Windows上使用VSCode时遇到的SSH连接问题:“过程试图写入的管道不存在”,并提供了两种解决方案。一是安装OpenSSH并通过配置ProxyCommand使用它连接;二是修改Windows的SSH默认环境变量,解决git ssh和默认ssh的冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       因为在windows上VSCode使用的默认ssh工具存在实现上的问题 ,导致一旦我们直接使用默认ssh连接会有报错:”过程试图写入的管道不存在”(The process tried to write to a nonexistent pipe)。

那出现这样的问题我们有两种解决办法。

解决办法一:安装open ssh,并在设置ProxyCommand时使用安装好的openssh来进行连接。

配置步骤:

一、安装openssh

我会在后记部分解释为什么这步是必需的。我推荐直接通过windows的Powershell来安装:

  1. 以管理员身份运行window Powershell(windows键+x,然后选(A)),然后键入如下两条命令:

第一条命令:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

(这条是用来检测是否有适合安装的openssh软件,正常情况下应有如下返回:)

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

第二条命令:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

(这条是用来安装openssh软件,如果安装完成应有如下返回:)

Path          :
Online        : True
RestartNeeded : False

二、配置ssh config

配置ssh config来实现跳板机访问可以极大地简化我们的连接流程。

一、打开ssh config文件(远程资源管理器 -> SSH Targets -> Configure -> ssh config)

二、配置ssh config

假设你的跳板机的ip地址为A,目标机器的地址为B,那么在你的config中写下如下配置并保存:

Host JumpMachine
    # 跳板机的ip地址
    HostName A
    # 你跳板机的用户名
    User username
    # 跳板机登录端口 
    Port 22

Host TargetMachine
    # 目标机的ip地址
    HostName B
    # 你目标机的用户名
    User username
    # 目标机登录端口 
    Port 8080
    ProxyCommand "openssh的安装路径"\ssh.exe -W %h:%p JumpMachine

其中”openssh的安装路径”因人而异(我的openssh的安装路径为C:\Windows\System32\OpenSSH\ssh.exe)。

如果一切正常的话,此时你在SSH Targets里就可以找到TargetMachine啦!点击旁边的小加号就可以开始远程连接啦!美滋滋~

如果希望配置公钥(ssh key)来实现无密码登录,可以百度“ssh 公钥登陆”。

解决办法二:直接修改Windows的ssh的默认环境变量,解决git ssh和默认ssh的冲突

这是原本环境变量中路径,将其删除

%SYSTEMROOT%\System32\OpenSSH\

 这是我电脑上git中ssh的路径,添加到环境变量(Path)中

C:\Program Files\Git\usr\bin

image-20200328210138004

image-20200328210209859

然后再次打开vscode连接虚拟机成功

 

 

 

 

### 配置 VSCode 使用跳板机(Bastion Host)SSH 连接到远程服务器 为了通过 Visual Studio Code (VSCode) 使用跳板机连接到目标服务器,需先设置本地 SSH 客户端以便能够经由跳板机到达最终目的地。具体操作如下: #### 修改 `.ssh/config` 文件 在本地计算机上编辑 `~/.ssh/config` 文件来定义通往目的主机的路径。对于涉及跳板的情况,应加入特定参数指示代理命令执行方式。 ```bash Host target-hostname HostName internal-server-ip-or-name User your-username-on-target ProxyJump jumpbox-user@jumpbox-hostname,another-jumpbox-if-needed IdentityFile /path/to/private/key.pem ``` 上述配置利用了 OpenSSH 的 `ProxyJump` 功能简化多级跳跃过程[^1]。此方法允许直接指定一系列中转节点直至达到目标机器而无需单独为每一跳编写复杂的指令集。 如果环境支持 `ProxyJump` 或者偏好更细粒度控制,则可采用传统的 `ProxyCommand` 方式替代: ```bash Host target-hostname HostName internal-server-ip-or-name User your-username-on-target ProxyCommand ssh -W %h:%p jumpbox-user@jumpbox-hostname IdentityFile /path/to/private/key.pem ``` 这里 `-W` 参数用于转发标准输入输出流至远端地址 `%h:%p`,从而建立从本机经过跳板再到实际工作主机的数据通道。 完成以上更改之后保存文件,并确保权限适当以免暴露敏感信息给其他用户读取。 #### 设置 VSCode Remote - SSH 扩展 安装好官方提供的 "Remote - SSH" 插件后,在 VSCode 中打开命令面板 (`Ctrl+Shift+P`) 并选择 `"Remote-SSH: Connect to Host..."` 输入之前设定的目标主机名 `target-hostname` 即可触发基于前述配置的新会话创建流程。 一旦成功建立了安全隧道,就可以像平常一样克隆仓库、编辑源码乃至运行调试工具等常规开发活动了。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值