实验室服务器跳板

情况介绍

实验室的 GPU 服务器是仅校园网内网访问的,不在校内就无法连接。

然后师兄给了我一台工位上的电脑,Linux 系统,使用向日葵远程桌面进行连接。但是网络太差了,使用起来一卡一卡的,根本干不了活,而且工位电脑开着显示器没什么隐私。

而且,我们实验室管理条例是禁止在 GPU 服务器上安装任何内网穿透服务的所以,如果你们实验室没有该条例可以直接从GPU服务器反向ssh到公网VPS,只需要一层跳板即可

解决方法

  1. 设置好ssh免密登陆:本地到VPS,工位到VPS,本地到GPU服务器

  2. 思路是有一台公网的VPS,然后从工位电脑反向ssh到公网服务器:

1
ssh -N -R 2222:localhost:22 <vps_user>@<vps_ip>

上面代码的作用是:将工位电脑的22端口(即ssh端口)映射到公网VPS的2222端口,相当于在 工位电脑-公网VPS 之间构建了一条双向通信的隧道,公网VPS的2222就是工位电脑的22端口。

  1. 在本地的笔记本上,ssh连接到公网VPS地址的2222端口,看看是否能直接连接工位电脑。可以的话,直接再增加一层跳板,从工位电脑跳到实验室的GPU服务器。

现在的路径为:本地笔记本 -> 公网 VPS -> 工位电脑 -> GPU 服务器

设置本地笔记本的 ~/.ssh/config 设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Host vps
HostName vps_ip
User vps_user
Port 22

Host workPC
HostName localhost
User your_lab_user
Port 2222
ProxyJump vps

Host labserver
HostName localhost
User your_lab_user
Port 2222
ProxyJump workPC

最后直接 ssh labserver即可。

  1. 最后可以在工位电脑上讲反向ssh的服务持久化,设置一个 systemd service
1
sudo nano /etc/systemd/system/reverse-ssh-tunnel.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Reverse SSH Tunnel to VPS
After=network.target
Wants=network-online.target

[Service]
User=<your_local_username>
Restart=always
RestartSec=5
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -N -R 2222:localhost:22 <vps_user>@<vps_ip>

[Install]
WantedBy=multi-user.target

替换占位信息后保存.

保存之后运行:

1
2
3
sudo systemctl daemon-reload
sudo systemctl enable reverse-ssh-tunnel.service
sudo systemctl start reverse-ssh-tunnel.service

查看运行状态:

1
sudo systemctl status reverse-ssh-tunnel.service