实用ssh命令|端口转发访问远程集群jupyter服务
作者:ahworld
链接:seurat结果转为scanpy可处理对象
来源:微信公众号seqyuan
著作权归作者所有,任何形式的转载都请联系作者。
使用ssh key的目的是使得两台机器之间建立互信,从其中一台登陆到另一台时不需要密码。就古代兵符
ssh key的生成
生成密钥对(公钥和私钥)方法:在命令行界面执行以下命令,然后一直按回车键(遇到选择,使用默认值)。
ssh-keygen -t rsa
执行完以上命令会生成~/.ssh
目录,.ssh目录会生成以下两个文件:
- id_rsa # 私钥
- id_rsa.pub # 公钥
命令行工具
上面ssh key的生成需要用到命令行工具,对于linux系统来说不做赘述,macos系统就是终端工具
如果是windows系统,建议使用MobaXterm
后续所指的执行命令,均指的是此命令行界面执行
节点间免密登陆
此处指的节点可以为远程linux计算集群也可以是本地电脑,我们统称为节点
。
想要从<u>由A</u>节点通过ssh<u>免密码登录到B</u>节点,需要执行以下操作:
把
A
节点的~/.ssh/id_rsa.pub
里的内容添加到B
的~/.ssh/authorized_keys
里
多级免密登陆
如果从A节点需要通过B节点跳转才能访问C节点,A节点到C节点的免密跳转设置方法:
- 把A的
~/.ssh/id_rsa.pub
里的内容添加到B的~/.ssh/authorized_keys
里 - 把A的
~/.ssh/id_rsa.pub
里的内容添加到C的~/.ssh/authorized_keys
里 - 把B的
~/.ssh/id_rsa.pub
里的内容添加到C的~/.ssh/authorized_keys
里
涉及到更多中间跳转的情况依上方法类推设置:把前面节点的公钥加入到后面节点的authorized_keys文件。
ssh登陆快捷键设置
可以通过配置~/.ssh/config
文件实现ssh快捷键登陆远程节点
如果是上图的情况:
- A节点可以直接登陆B节点
- B节点可以直接登录C节点
- A节点不能直接登录C节点
可以这样配置A节点(本地电脑)~/.ssh/config
里的内容:
Host vpnB
Hostname s.seqyuan.com
Port 520
User ahworld
IdentityFile ~/.ssh/id_rsa
Host C
Hostname 192.168.0.200
User ahworld
IdentityFile ~/.ssh/id_rsa
Port 22
ProxyCommand ssh -W %h:%p vpnB
本地电脑按照如上设置之后
- 想要登录B节点,可执行
ssh vpnB
命令 - 想要登录C节点,可执行
ssh C
命令 - 想要拷贝A节点的<u>/path/test.txt</u>文件到C节点的/path2/目录,可执行
scp -r /path/test.txt C:/path2/
- 想要拷贝C节点的<u>/path3/qwer.txt</u>文件到A节点的当前目录,可执行
scp -r C:/path3/qwer.txt ./
访问远程web服务
我们经常用到远程web服务的情况:
- 远程集群建立
python3 –m http.server
,便于本地电脑浏览器查看远程集群的图片 - 使用远程linux集群建立的
jupyter
或者rstudio-server
计算服务
linux集群建立jupyter服务的教程见
- 普通linux集群版,本教程算是这篇文章的承诺填坑之作
- jupyter服务以docker启动版
本地电脑和远程web服务处于同一内网的情况
ssh端口转发
# 远程linux集群
Host: s.seqyuan.com
HostPort: 520
JupyterPort: 8900 (jupyter服务port)
User: ahworld
如果本地电脑能够通过ssh -p 520 ahworld@s.seqyuan.com
命令(或者前面的快捷命令ssh vpnB
)登录远程节点,但是不能通过在本地电脑浏览器输入远程浏览器的网址:jupyter端口
(s.seqyuan.com:8900)直接访问远jupyter服务,解决方案为在本地电脑命令行执行以下命令:
ssh -N -f -L localhost:8787:localhost:8900 -p 520 ahworld@s.seqyuan.com
然后在本地电脑浏览器输入127.0.0.1:8787
就能访问s.seqyuan.com
节点建立的端口为8900的jupyter服务了。
ssh 端口转发的主要参数意义:
-
-f
:后台认证用户/密码,通常和-N连用,不用登录到远程主机 -
-N
:不执行脚本或命令,通常与-f连用,不使用Shell窗口,纯做转发的时候用,如果你在映射完成后继续在服务器上输入命令,去掉这个参数即可 -
-L
:本地端口:目标IP:目标端口 -
-p
:被登录的ssd服务器的sshd服务端口 -
-C
:压缩数据传输 -
-g
:在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接
ssh端口转发-多级跳转
如果是上图的情况,或者中间涉及更多级的跳转,想要在A节点(本地电脑)访问终节点(图中的C节点)建立的jupyter服务,可以在本地电脑命令行执行以下ssh端口转发命令(前提:设置ssh快捷键):
ssh -N vpnB -C -c 3des-cbc -L 8787:192.168.0.200:8901
然后本地浏览器输入127.0.0.1:8787
就能访问C
节点的jupyter服务
如果涉及多级跳转-N
后的vpnB
需要改成终节点
的上一级跳转节点的快捷键。