VSCode Remote ssh跳板机配置(windows平台)

VSCode Remote ssh跳板机配置(windows平台)

不得不说,VSCode真的是一款非常优秀的编辑器,配合各种插件就成为了一款称手的轻量级IDE。相信很多同学都有在服务器上跑实验的需求,我也不例外。一开始,我采用MobaXterm作为连接远程服务器的工具,但如果想在线上对代码做修改就只能用文本编辑器,没有代码高亮、补全,同时也只能用命令行调试工具,体验就不是很好。VSCode推出的Remote ssh插件就很好地解决了我的痛点,一键连接服务器,远程开发、调试、设置虚拟环境,丝滑得如同本地开发一般~

已经有热心人分享了如何完成VSCode Remote ssh的基本设置:

某湘:VSCode Remote 体验 | 远程Linux环境开发真香

同时建议有能力的小伙伴直接阅读一下官网:

vscode官网教程

我在这里就不重复造轮子啦,重点讲述一些大家没提到的点,比如如何完成VSCode Remote ssh的跳板机配置(即需要多次跳转)。请大家在熟悉了VSCode Remote ssh的基本设置之后再来阅读本文。

配置步骤:

一、安装openssh

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

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

第一条命令:

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 公钥登陆”。[3]

后记

  1. 为什么一定要安装openssh?

因为在windows上VSCode使用的默认ssh工具存在实现上的问题[4] ,导致一旦我们直接使用默认ssh连接会有报错:”过程试图写入的管道不存在”(The process tried to write to a nonexistent pipe)。因此,我们务必安装openssh,并在设置ProxyCommand时使用安装好的openssh来进行连接。

2. ProxyCommand中每个参数的意义?

“-W”表示stdio forwarding模式[5][6],接着后面的%h是一个占位符,表示要连接的目标机,也就是Hostname指定的ip或者主机名。%p同样也是占位符,表示要连接到目标机的端口。这里可以直接写死固定值,但是使用%h和%p可以保证在Hostname和Port变化的情况下ProxyCommand这行不用跟着变化。[7]

参考

  1. ^https://blog.csdn.net/maokelong95/article/details/91801944
  2. ^https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse
  3. ^https://zhuanlan.zhihu.com/p/64849549
  4. ^https://github.com/microsoft/vscode-remote-release/issues/1398
  5. ^https://www.tecmint.com/access-linux-server-using-a-jump-host/
  6. ^OpenSSH Wiki,打开需要科学上网 https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts#Passing_Through_One_or_More_Gateways_Using_ProxyJump
  7. ^https://cikeblog.com/proxycommand.html
编辑于 2020-04-27 18:39