tabby和vscode配置跳板机登录

如题。

这个问题源于实际需求:如下图,实验室的网络环境造成了内网和公网的隔离,其中计算任务都需要在内网主机1上运行。然而内网主机1不具有公网IP,一旦离开实验室的内网环境(例如断开WIFI回到宿舍),那么就无法访问主机1了。好在内网环境下有跳板机(或称之为gate节点),其拥有公网IP,意味着在实验室外也可以访问。因此,公网环境的PC若想访问内网环境下的主机1,需要以内网主机2为跳板机,先登录内网主机2,再从内网主机2登录主机1。

然而,每次登录实验室服务器(内网主机1)都需要从内网主机2做跳转,这个过程要登录两次,实在太麻烦。有没有一种工具可以简化这个登陆的过程,实现自动化的跳转登录呢?

image.png

经过一些资料收集和与同学的交流,大致了解到两种方法可以实现这一需求:①使用Tabby这款命令行工具进行登录,其内置了对跳板机登录的支持;②使用vscode的远程登陆功能,只不过需要进行一些额外的配置。下面我们将依次介绍这两种方法。

基于Tabby的跳板机登录方法

Tabby是一款开源的命令行工具(Github链接: https://github.com/Eugeny/tabby ),其使用electron技术开发,因此颜值非常高(缺点是略微有点消耗性能,算是高颜值的代价)。在GitHub仓库的release页面 上提供了下载链接,可以选择适合自己系统版本的安装包进行下载和安装,安装之后的界面如下。

tabby main window

配置跳板机登录

下面我们来创建连接。创建新连接配置的方法如下图所示,在设置页面的“Profiles&connections”里面点击“+New”即可进入配置界面。

image.png

在Tabby里面,创建需要经过跳板机登陆的远程连接,需要两步。假设我们的跳板机域名是gate.example.com,内网主机的IP地址为 192.168.10.10,下面我们首先进行跳板机的连接。

如下图,在选择profile template这里,选择SSH connection。

e8b7c12c6598ebe3fc37e3aa100bbba.png

这里设置一个连接名称,简单易记即可。后面要用到。

dcb21a43b1235b6f3608314a23c02d6.png

这个界面继续往下滚动,可以看到更多的设置。在这里配置好跳板机的主机名,设置登陆密码,之后点击保存,即完成了跳板机的设置。可以在连接窗口中连接一下跳板机,测试是否配置成功。

028d163a1aed9917f01475ce61907e9.png

配置内网主机登录

之后,再创建登录内网服务器的连接。

我们依然在设置页面的“Profiles&connections”里面点击“+New”,选择SSH连接为模板,进入配置界面。这里我们把新的连接命名为 server host 1 ,以便与之前的连接做区分。

c7750a6d94d72019f10fea209a4d4aa.png

下面,我们配置内网服务器的IP等信息。如下图,首先在Connection方式里选择“Jump host”(跳板主机),并在Jump host栏里选择刚刚创建的gate主机。之后,按实际情况配置Host、Port、Username等信息,并设置登陆密码,如此我们就完成了配置。

image.png

实际使用

在“Profiles&connections”列表里面选择刚刚配置的连接,点击三角符号即可启动连接。

image.png

连接过程如下。首先,tabby会自动登录到跳板机,屏幕上输出下面这些信息:

1730448911745.png

随后,tabby会自动的完成从跳板机到内网主机的登录,屏幕输出如下所示:

1730448988554.png

tabby还支持通过Jump Host的SFTP传文件,如下图所示。这一功能非常方便,免去了ssh登录的两次scp拷贝文件的麻烦。

1730449063191.png

基于vscode的跳板机配置

参考: 《VSCode Remote ssh跳板机配置(windows平台)》 - shsjxzh的文章 - 知乎

vscode自身并不支持远程连接,但是vscode插件市场提供了远程登陆的插件,可以帮助我们连接远程服务器(参考博客的往期文章 《VS Code配置远程服务器插件》)。

相比于tabby,vscode虽然也支持跳板机登录,但支持的并不是很直白。我们需要手动修改一些配置文件,才能实现跳板机登录。如下图,首先我们打开vscode远程登陆的配置文件。

image.png

打开以后,我们在文件里添加下面这些内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Host JumpMachine
# 跳板机的域名或ip地址
HostName gate.example.com
# 你跳板机的用户名
User yourname
# 跳板机登录端口
Port 22

Host TargetMachine
# 目标机的ip地址
HostName 192.168.10.10
# 你目标机的用户名
User yourname
# 目标机登录端口
Port 22
ProxyCommand ssh -W %h:%p JumpMachine

1730463066749.png

保存以后,点刷新,左侧远程连接的列表里面就会显示出JumpMachine、TargetMachine的信息。要连接时,点击TargetMachine即可实现跳板机连接内网主机。

1730464318846.png

以上。