美文网首页
实用ssh命令|端口转发访问远程集群jupyter服务

实用ssh命令|端口转发访问远程集群jupyter服务

作者: seqyuan | 来源:发表于2021-05-23 09:48 被阅读0次

    作者: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节点的免密跳转设置方法:

    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节点的<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服务的教程见

    本地电脑和远程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需要改成终节点的上一级跳转节点的快捷键。

    相关文章

      网友评论

          本文标题:实用ssh命令|端口转发访问远程集群jupyter服务

          本文链接:https://www.haomeiwen.com/subject/hhbajltx.html