最近需要远程在实验室的服务器跑实验,看了一些文档,一番折腾后给大家分享一下配置。
服务器的操作系统是 Ubuntu,CentOS 可以对应的替换下命令,操作一致。
安装(服务器)
sudo apt-get update sudo apt-get install openssh-server
创建密钥(主机)
cd ~/.ssh ssh-keygen -t rsa -f id-rsa-ubuntu
将公钥复制到服务器(主机)
ssh-copy-id -i id-rsa-ubuntu.pub 用户名@服务器地址
修改config内容(主机)
这一部分是为了简化登录流程。
touch ~/.ssh/config vim ~/.ssh/config
config 参数:
- Host: 别名,可以直接用于 ssh 登录
- Hostname: ip 地址
- Port: SSH 端口号(如果做了内网穿透,则需要填写对应的端口号)
- 比如:下图对应的是 10387
- User: 登录的用户名
- PreferredAuthentications: 指定客户端的认证方法为公钥
- IdentityFile: 当前指的是私钥路径
P.S: 具体的参数信息可以通过 man ssh_config
查看
下面是配置文件样例:
Host Ubuntu HostName x.x.x.x User xx PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_ubuntu Host x.x.x.x User xx PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_ubuntu Host x.x.x.x PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_ubuntu Host Ubuntu-Nat-DDNS HostName x.x.x.x Port xx User xx PreferredAuthentications publickey IdentityFile ~/.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 authtoken xxxxxxx
开机自启动(服务器)
执行下列命令让其开机自动进行内网穿透,这样在远程服务器不慎重启时,本机依然可以连接。
sudo systemctl enable cpolar sudo systemctl start cpolar sudo systemctl status cpolar
显示 active
表示成功。
查看公网地址和端口号(服务器/主机)
现在有两种方法可以看到你内网穿透后的状态:
对应到 ~/.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
,而且其实你只需要 screen
。
sudo apt-get update sudo apt-get install screen
执行命令
screen 命令
其他命令
对于我来说,我只需要远程服务器不间断的跑 jupyter notebook
,如果你和我一样,那么你只需要知道下面的操作:
因为担心实验室不小心断电,所以设置一下通电自启。
我的主板是微星,所以这里仅给出微星的示例(其他的主板大同小异,可以在网上自行查找):
参考链接:
原文链接:https://blog.csdn.net/weixin_42426841/article/details/129684565?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168449620216800182123704%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168449620216800182123704&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-2-129684565-null-null.blog_rank_default&utm_term=NAS%E3%80%81%E7%BE%A4%E6%99%96%E3%80%81%E9%98%BF%E9%87%8C%E4%BA%91%E3%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E3%80%81%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E3%80%81ipv6%E3%80%81ddns%E3%80%81%E8%BD%BB%E9%87%8F%E7%BA%A7%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%81%E9%93%81%E5%A8%81%E9%A9%AC%E3%80%81%E5%A8%81%E8%81%94%E9%80%9A%E3%80%81DSM%E3%80%81DSM6.0%E3%80%81%E7%BE%A4%E6%99%96nas%E3%80%81%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%81%E8%9C%97%E7%89%9B%E6%98%9F%E9%99%85%E3%80%81%E9%BB%91%E7%BE%A4%E6%99%96%E3%80%81docker%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E3%80%81%E5%AE%9D%E5%A1%94%E3%80%81%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E3%80%81nginx%E3%80%81frp%E3%80%81%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90