引子

事情的最初是实验室同门乾任和我,发现实验室一台没有人用的电脑具有两张3090显卡。我们问了一圈实验室,大家都忘记了密码,于是我们为这台电脑重新安装了linux系统以及openssh等远程工具(安装过程很简单,略)。这使得我们得以在终端,vscode,mobaxterm等中便捷地远程访问服务器的环境(炼丹)。

简单来说,在校园网之下,我们只需要以下一行代码,便可以访问服务器:

1
2
# ssh -p <port_number> <username>@<ip_address>
ssh -p 1220 lasso@10.16.20.194

运行示例:

image-20231218204812386

然而,上述方法无法使得我们在非校园网的情况下访问服务器,主要原因是实验室服务器并没有一个公网ip地址。

Ngrok内网穿透

我们可以使用免费内网穿透工具Ngrok解决该问题。(安装过程很简单,略)

在内网或者使用向日葵登陆服务器,运行如下代码即可:

1
2
3
4
5
# https://dashboard.ngrok.com/get-started/setup
ngrok config add-authtoken <your_authtoken>
# ngrok tcp <port_number>
# 该port_number默认为20,我们在/etc/ssh/sshd_config将端口号改为了1220
ngrok tcp 1220

接下来,我们有如下结果:

ngrok

基于此,我们在公网下可通过如下代码访问课题组服务器:

1
2
# ssh -p <port_number> <username>@<ip_address>
ssh -p 11808 lasso@0.tcp.ap.ngrok.io

需要注意的是: 由于我们使用的是免费版 ngrok,每次运行 ngrok tcp 1220 所得到的公网 URL 以及端口号都是随机的。因此,每当服务器重新启动,我们需要更改上述代码。

运行示例:

image-20231218210144344