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

       因为在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)

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

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

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

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

二、配置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啦!点击旁边的小加号就可以开始远程连接啦!美滋滋~

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

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

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

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

%SYSTEMROOT%\System32\OpenSSH\

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

C:\Program Files\Git\usr\bin

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

image-20200328210209859

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

 

 

 

 

你可能感兴趣的:(计算机常识)