一、安装openssh
我会在后记部分解释为什么这步是必需的。好多人推荐都是使用windows的Powershell来安装:
第一条命令:
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
HostName A # 跳板机的ip地址
User username # 你跳板机的用户名
Port 22 # 跳板机登录端口
Host TargetMachine
HostName B # 目标机的ip地址
User username # 你目标机的用户名
Port 8080 # 目标机登录端口
ProxyCommand "openssh的安装路径"\ssh.exe -W %h:%p JumpMachine
其中”openssh的安装路径”因人而异(我的openssh的安装路径为C:\Windows\System32\OpenSSH\ssh.exe)。
如果一切正常的话,此时你在SSH Targets里就可以找到TargetMachine啦!点击旁边的小加号就可以开始远程连接啦!
后记
- 为什么一定要安装openssh?
因为在windows上VSCode使用的默认ssh工具存在实现上的问题 ,导致一旦我们直接使用默认ssh连接会有报错:”过程试图写入的管道不存在”(The process tried to write to a nonexistent pipe)。因此,我们务必安装openssh,并在设置ProxyCommand时使用安装好的openssh来进行连接。
2. ProxyCommand中每个参数的意义?
“-W”表示stdio forwarding模式,接着后面的%h是一个占位符,表示要连接的目标机,也就是Hostname指定的ip或者主机名。%p同样也是占位符,表示要连接到目标机的端口。这里可以直接写死固定值,但是使用%h和%p可以保证在Hostname和Port变化的情况下ProxyCommand这行不用跟着变化。
遇到的问题:
我通过windows的Powershell安装openssh,在使用vscode可以连接上跳板机,但是连不上远程服务器,总是报错“过程试图写入的管道不存在”,百思不得其解,最后发现是我的电脑上面的openssh是7.5版的,而连接远程服务器需要openssh是8.0版本及以上,否则就会出现各种bug。(查看版本命令,进入cmd,输入ssh -V,查看openssh安装位置使用命令where ssh),所以要将openssh版本由7.5更换为8.0解决此问题。
解决方法:
1,下载openSSH windows版
https://github.com/PowerShell/Win32-OpenSSH/releases
我安装的是64位版本 OpenSSH-Win64.zip(https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.0.0.0p1-Beta/OpenSSH-Win64.zip)
2,解压到C:\Windows\System32\OpenSSH目录。
3,配置环境变量,将OpenSSH写入到path中
这么操作后就可以了。