最近需要远程在实验室的服务器跑实验,看了一些文档,一番折腾后给大家分享一下配置。
服务器的操作系统是 Ubuntu,CentOS 可以对应的替换下命令,操作一致。
sudo apt-get update
sudo apt-get install openssh-server
ssh-keygen -t rsa -f id-rsa-ubuntu
ssh-copy-id -i id-rsa-ubuntu.pub 用户名@服务器地址
如果你此时与服务器可以用内网通信,那么直接填写内网地址即可,如果不行,先跳过这段,看 cpolar部分。
这一部分是为了简化登录流程。
touch ~/.ssh/config
vim ~/.ssh/config
config 参数:

P.S: 具体的参数信息可以通过 man ssh_config 查看
下面是配置文件样例:
# 以下四种皆可,如果是内网推荐第 1 种,外网推荐第 4 种
# 1. 使用 ssh Ubuntu 登录(内网推荐)
Host UbuntuHostName x.x.x.x # 填写 ip(如果是外网登录内网,需要做内网穿透)User xx # 远程主机的登录名PreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_ubuntu# 2. 使用 ssh x.x.x.x 或 ssh user@x.x.x.x 登录
Host x.x.x.x User xxPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_ubuntu# 3. 使用 ssh user@x.x.x.x 登录
Host x.x.x.xPreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_ubuntu# 4. 使用 ssh Ubuntu-Nat-DDNS 做了内网穿透后的主机(推荐)
Host Ubuntu-Nat-DDNS # 你可以改成你想要的名字HostName x.x.x.x # 填写公网ipPort xx # 公网 ip 对应的 端口号User xx # 远程主机的登录名PreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_ubuntu
如果 Host 指定了别名,则可以直接使用 ssh Host 登录,这是推荐的方式,非常的优雅。
比如 ssh Ubuntu-Nat-DDNS 直接登录到远程服务器,或者使用 ssh -L8888:localhost:8888 Ubuntu-Nat-DDNS,在登录服务器的同时将本地的8888号端口映射到服务器,从而开始快乐的跑 Jupyter。
编辑完之后,使用 esc 进入命令模式,用 :wq 保存并退出。
打一大串命令还是有点麻烦,可以设置命令别名来简化它,因为我需要远程在服务器上跑 jupyter notebook,所以我设置的命令别名为:Ubuntu-Jupyter-Notebook-NATDDNS,你可以自定义你的命令别名。
alias 指定一个命令别名执行 = 后面的操作,请同样自定义你的命令,然后使用 echo alias 命令别名="命令" >> 配置文件 来加入配置。
我的需求是远程连接到服务器后跑 jupyter notebook,并且查看 Tensorboard,所以需要映射主机的 8888 和 6006 端口到远程的 8888 和 6006 号端口上,当前服务器设置的 Host 为 Ubuntu-Nat-DDNS (~/.ssh/config 中的设置)。
那么对应的命令就是 ssh -L8888:localhost:8888 -L6006:localhost:6006 Ubuntu-Nat-DDNS 。
下面给出 bash 和 zsh 别名的设置样例。
使用下面的命令将命令别名添加到配置文件中,对应的命令需要自定义。
echo alias Ubuntu-Jupyter-Notebook-NATDDNS="ssh -L8888:localhost:8888 -L6006:localhost:6006 Ubuntu-NAT-DDNS" >> ~/.bashrc
source ~/.bashrc
echo alias Ubuntu-Jupyter-Notebook-NATDDNS="ssh -L8888:localhost:8888 -L6006:localhost:6006 Ubuntu-NAT-DDNS" >> ~/.zshrc
source ~/.zshrc
现在,你可以在命令行中直接运行 Ubuntu-Jupyter-Notebook-NATDDNS 来进行连接,同时,本地的 8888 和 6006 号端口将会被映射。
这项服务是免费的
此段部分搬运自官方文档
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
使用 cpolar version 查看是否安装成功
登录cpolar官网后台,点击左侧的
验证,查看自己的认证 token,之后将 token 贴在命令行里
cpolar authtoken xxxxxxx
执行下列命令让其开机自动进行内网穿透,这样在远程服务器不慎重启时,本机依然可以连接。
sudo systemctl enable cpolar # 向系统添加服务
sudo systemctl start cpolar # 启动cpolar服务
sudo systemctl status cpolar # 查看服务状态
显示 active 表示成功。
现在有两种方法可以看到你内网穿透后的状态:
ssh 对应的 URL,以我当前的为例:tcp://3.tcp.vip.cpolar.cn:10387,这表明我的公网地址为 3.tcp.vip.cpolar.cn,端口号是 10387。对应到 ~/.ssh/config 文件中: HostName 3.tcp.vip.cpolar.cn,Port 10387。
你现在可以跳转回上面继续进行 ~/.ssh/config 的配置。
你需要重新访问 https://dashboard.cpolar.com/status 查看端口号。
因为免费是这样的 😃,你的端口号被重新分配了,没有什么大不了的,把这个网址收藏一下就行,一般来说几天才会重新分配一次,当然,也有可能是 ip 被重新分配了,但这个频率较低。
然后修改 config 中的 Port 项或者 HostName 项。
总是修改也有些麻烦,将打开 ssh config 修改的操作也进行简化:
echo alias sshconfig="vim +/Port ~/.ssh/config" >> ~/.bashrc
source ~/.bashrc
echo alias sshconfig="vim +/Port ~/.ssh/config" >> ~/.zshrc
source ~/.zshrc
现在,你可以使用 sshconfig 直接进行编辑,+/Port 命令会让你直接跳转到 Port 对应的行,此时使用 shift + a 即可直接编辑,如果你有多个 Port,那么用 n 跳转到对应的行即可。
编辑完之后,使用 esc 进入命令模式,用 :wq 保存并退出。
升级套餐,固定域名和端口的套餐是专业版 149/年。
现在有一个问题,就是主机在断网的时候,实验会终止。
有一个解决方法是 screen,而且其实你只需要 screen。
sudo apt-get update
sudo apt-get install screen
screen 命令
对于我来说,我只需要远程服务器不间断的跑 jupyter notebook,如果你和我一样,那么你只需要知道下面的操作:
Ctrl+a d 或者 Ctrl+ a Ctrl +d 分离当前的会话。session: 使用 screen -ls 查看对应的进程,然后 screen -r session_id。session: screen -S session_name 命令,此时分离会话后可以直接使用 screen -r session_name 重新连接。screen -X -S session_id quit 或 screen -X -S session_name quit。因为担心实验室不小心断电,所以设置一下通电自启。
我的主板是微星,所以这里仅给出微星的示例(其他的主板大同小异,可以在网上自行查找):
Del,直到进入 BIOS(可以设置成中文界面)。Advanced,进入 SETTINGS>Power Management Setup 然后找到 Restore alter AC Power Loss 选项。Power On ,然后按下 F10 保存更改并退出 BIOS 设置。参考链接: