因为在windows上VSCode使用的默认ssh工具存在实现上的问题 ,导致一旦我们直接使用默认ssh连接会有报错:”过程试图写入的管道不存在”(The process tried to write to a nonexistent pipe)。
那出现这样的问题我们有两种解决办法。
解决办法一:安装open ssh,并在设置ProxyCommand时使用安装好的openssh来进行连接。
配置步骤:
一、安装openssh
我会在后记部分解释为什么这步是必需的。我推荐直接通过windows的Powershell来安装:
- 以管理员身份运行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
然后再次打开vscode连接虚拟机成功