因为疫情在家,无法直接使用学校实验室的GPU服务器,模型没法训练,很耽误事情,所以搞了这件事情,已经一个月了,现在总结一下。

背景

校园的内网的特点是只允许内网机器访问外网机器,不允许外网机器访问内网机器,所以没法实现家里的电脑直接连接学校服务器。

这就需要一台具有公网IP的机器作为桥梁,通过服务器反向ssh连接桥梁机器,然后家里的电脑ssh连接桥梁机器就可以对服务器进行操作。

桥梁机器可以在阿里云上租用,一般使用最便宜的轻量应用服务器就行,价格才每月9.5元。假设租用的中间服务器公网IP是abc.de.fgh.ijk。一定要记得自己设置的密码。

配置流程

在服务器上操作:(这个我是找疫情期间继续在学校的导师帮忙的。。)

  1. 设置服务器免密码登录中间服务器
ssh-keygen -t rsa

一路按回车,最后生成的id_rsa.pub文件在~/.ssh/文件里面

  1. 将生成的文件推送到中间服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub root@abc.de.fgh.ijk -p 22

注:root为租的中间服务器的用户名,公网IP为abc.de.fgh.ijk

  1. 下载安装autossh
apt-get install autossh
  1. 测试autossh和免密登录是否成功
autossh -M 9991 -NfR 8990:localhost:22 root@abc.de.fgh.ijk

然后,登录中间服务器,进行验证。
在中间服务器上操作:

watch -n 1 netstat -tnlp

如果显示有127.0.0.1:8990这样的端口号,说明成功。
继续在服务器上配置
5. 创建autossh.service

gedit /lib/systemd/system/autossh.service
  1. 将以下内容加到刚刚创建的文件中。
[Unit]
Description=Auto SSH Tunnel
After=network-online.target
[Service]
User=user(用户名)
Type=simple
ExecStart=/usr/bin/autossh -NR 9888:localhost:22 -i /home/user/.ssh/id_rsa 
root@abc.de.fgh.ijk -p 22 >> /dev/null 2>&1
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -TERM $MAINPID
KillMode=process
Restart=no
[Install]
WantedBy=multi-user.target
WantedBy=graphical.target



systemctl enable autossh



systemctl start autossh



systemctl status autossh

这一步之后,在中间服务器上进行验证。

watch -n 1 netstat -tnlp

如果显示有127.0.0.1:9888这样的端口,则说明成功。
配置完毕。

使用

  1. 登录中间服务器:
ssh abc.de.fgh.ijk

输入自己设置的密码。

  1. 登录远程GPU服务器
    先按1登录中间服务器,然后
ssh -p 9888 user@127.0.0.1

传输文件

传输文件比较麻烦,也需要经过中间服务器。

  1. 本地和中间服务器的文件传输(默认本地的操作系统为windows):
    安装winscp(下载地址)
    登录后左边栏为本地,右边栏为中间服务器,通过左右拖拽文件来实现传输。
    2. 中间服务器–>远程服务器
    传输文件夹:
scp -P 9888 -r document user@127.0.0.1:document_path

注:document:中间服务器的文件夹;document_path:实验室GPU服务器目标路径,如:study/
传输文件:

scp -P 9888 file user@127.0.0.1:file_path

注:file:中间服务器的文件,如:1.py;file_path:实验室GPU服务器目标路径,如:study/
2. 远程服务器–>中间服务器
传输文件夹:

scp -r document root@abc.de.fgh.ijk:/root/

传输文件:

scp file root@abc.de.fgh.ijk:/root/

大功告成,在家里也有了四块2080Ti!

如何挂载到GPU服务器 如何使用gpu服务器_服务器