实用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计算集群也可以是本地电脑,我们统称为节点

想要从由A节点通过ssh免密码登录到B节点,需要执行以下操作:

A节点的~/.ssh/id_rsa.pub里的内容添加到B~/.ssh/authorized_keys

多级免密登陆

如果从A节点需要通过B节点跳转才能访问C节点,A节点到C节点的免密跳转设置方法:

  1. 把A的~/.ssh/id_rsa.pub里的内容添加到B的~/.ssh/authorized_keys
  2. 把A的~/.ssh/id_rsa.pub里的内容添加到C的~/.ssh/authorized_keys
  3. 把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节点的/path/test.txt文件到C节点的/path2/目录,可执行scp -r /path/test.txt C:/path2/
  • 想要拷贝C节点的/path3/qwer.txt文件到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 [email protected]命令(或者前面的快捷命令ssh vpnB)登录远程节点,但是不能通过在本地电脑浏览器输入远程浏览器的网址:jupyter端口(s.seqyuan.com:8900)直接访问远jupyter服务,解决方案为在本地电脑命令行执行以下命令:

ssh -N -f -L localhost:8787:localhost:8900 -p 520 [email protected]

然后在本地电脑浏览器输入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需要改成终节点的上一级跳转节点的快捷键。

你可能感兴趣的:(实用ssh命令|端口转发访问远程集群jupyter服务)