- 平时在开发深度学习等相关项目时,往往需要大型服务器或工作站的支持,远程开发时使用向日葵等远程桌面软件往往不是那么明知,多人使用冲突、限速卡顿,代码体验极其**。
- 那么有没有更好的解决方案呢?单就小型团队而言,如果能将所有散布在各个实验室的机器使用内网穿透统一接入同一局域网,便可方便的使用ssh连接,搭配
vscode
的ssh-remote
插件与tmux
进行终端复用,便可实现本地无感的远程开发。
1. ZeroTier配置内网穿透
1.1 简介
ZeroTier 作为一款非常简单易用的内网穿透工具,不需要复杂配置,就能实现虚拟局域网的组建,让你可以在外也能连回实验室的NAS、服务器获取数据、远程开发。
1.2 费用
免费网络限制 100 台设备,超过了就要付费。100 台对于个人或者小团队使用来说都足够了。
1.3 支持平台
1.4 使用步骤
- 说明:如已有Network ID,直接执行步骤3,安装客户端,加入Network ID即可
- 注册ZeroTier ID:
- 创建私有局域网,得到Network ID与子网地址:
-
安装客户端,加入Network ID
-
windows下
ipconfig
,ubuntu下ifconfig
出现ZeroTier的网段后说明连接成功(也可直接ping其他ip验证):
-
-
管理:
-
可以选择子网地址:
-
查看连接客户端,第三列机器即为所有机器的局域网IP,接下来的步骤即shh该ip地址:
-
2. VSCode配置Remote-SSH插件
2.1 安装OpenSSH
-
Remote-SSH插件是基于SHH的,所以首先要确保本机和远程服务器都安装好了OpenSHH
-
Ubuntu:
ubuntu默认并没有安装ssh服务,如果通过ssh链接ubuntu,需要自己手动安装ssh-server。判断是否安装ssh服务,可以通过如下命令进行:
ssh localhost ssh: connect to host localhost port 22: Connection refused
若出现上述情况,表示还没有安装,可通过以下命令安装:
sudo apt-get install openssh-server sudo /etc/init.d/ssh start
安装启动后,可以通过如下命令查看服务是否正确启动:
ps -e|grep ssh 6212 ? 00:00:00 sshd
如上表示安装成功
-
Windows:
Win10现在已经支持OpenSSH,可在设置->应用->可选功能中查看:
若未安装,直接使用添加功能->搜索SSH安装即可,其他安装方式可参考Windows安装OpenSSH支持SSH - 简书 (jianshu.com)
-
Mac OS:
Mac OS X系统已经默认安装了SSH,但是SSH服务并未启用,启用SSH服务的方法:
系统偏好设置->共享->勾选“远程登陆”:
-
验证ssh:
使用:
ssh <username>@<ip>
连接任意主机,输入密码连接成功即可:
2.2 配置Remote-SSH插件
-
安装Remote-SSH:
在vscode的拓展商店中搜索Remote-SSH进行安装,安装完成后左侧会出现以下按钮:
-
配置config文件:
进入该拓展,点击SSH TARGETS上面的设置按钮,选择所要配置的ssh config文件(一般为第一个):
配置远程服务器的名称、ip与用户名:
-
Host
: 主机的自定义显示名,可以随便起 -
HostName
: 登录远程主机的内网IP,即1.4中主机内网穿透后得到的虚拟IP -
User
: 登录远程主机的用户名 -
Port
: 用于登录远程主机的端口(可选) -
IdentityFile
: 本地的id_rsa的路径(用于免密登陆的私钥)(多人使用不推荐配置私钥免密)(可选)
-
-
远程连接测试:
配置完成后,该窗口下会出现所配置的主机,可以在新窗口下进行连接:
(第一次连接需要选择服务器操作系统)-> 输入密码->等待服务器安装vscode远程端->打开远程项目文件夹后即可开始使用,所有的使用均和本地使用无任何差异:
3. 使用Tmux保证会话持续运行
3.1 Tmux简介
- **目的:**避免训练过程中因为本地Terminal关闭后服务器上的进程也被关闭。
为什么需要终端复用?
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
Tmux 终端复用的作用?
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
3.2 Tmux的安装
# Ubuntu 或 Debian
$ sudo apt-get install tmux
# CentOS 或 Fedora
$ sudo yum install tmux
# Mac
$ brew install tmux
3.3 Tmux使用常用命令
$ tmux new -s <窗口名> # 打开新窗口
ctrl+b d # 分离窗口
$ tmux info # 列出当前所有 Tmux 会话信息
$ tmux attach -t <窗口名> # 连接窗口
ctrl+b % # 分割窗口
ctrl+b s # 切换窗口
4. 远程文件拷贝
-
直接使用以下命令即可:
$ scp <本地文件路径> <远程主机用户名>@<远程主机ip>:<要拷贝到的远程主机路径> #或 $ scp <远程主机用户名>@<远程主机ip>:<要拷贝的远程主机文件路径> <拷贝到的本地文件路径>
例如:
$ scp .\labels.zip hp3090@192.168.192.164:/media/hp3090/HDD-2T/renjunjie/WSOL_RS/dataset/C45V2