zoukankan      html  css  js  c++  java
  • 利用ssh穿越多个跳板机最简单最高效的办法

    【摘要】 对于云计算环境下多跳网络拓扑更为常见,一级一级ssh登录比较低效,拷贝文件更不方便了。本文描述一种方法,可对一个向上生长的树形跳板拓扑的任意节点,按自定义名字进行简单/直接/快速的ssh访问和scp/sftp等文件拷贝。

    一般大家知道ssh可以用~/.ssh/{id_rsa, id_rsa.pub, authorized_keys}三个文件进行无密码登录远程ssh server进行命令行下的工作(若拷贝文件可以用scp/sftp)。但是对于云计算环境下多跳网络拓扑更为常见,一级一级ssh登录比较低效,拷贝文件更不方便了。本文描述一种方法,可对一个向上生长的树形跳板拓扑的任意节点,按自定义名字进行简单/直接/快速的ssh访问和scp/sftp等文件拷贝。 

    1. 在每个节点产生公钥私钥对

    • ssh-keygen -t rsa 运行此命令产生公钥私钥,一路回车可以不设置保护密码

    • 检查是否产生了这俩文件 ~/.ssh/id_rsa,~/.ssh/id_rsa.pub

    • 记住这个公钥私钥对所属的用户名

    2. 把本机公钥放到每一个直连下一跳的~/.ssh/authorized_keys

    • cat ~/.ssh/id_rsa.pub | ssh username@next_jumper 'cat - >> ~/.ssh/authorized_keys', 此处需要username的密码

    • 尝试ssh username@next_jumper 这时不需要密码应该能登录

    • 对中间跳板机之间的每个登录关系做如上验证

    3. 作为访问起点的client需要额外设置

    • 确保ssh client支持ProxyJump语句(openssh 7.5版本之后,mac mojave和ubuntu 18.04开始)

    • 创建~/.ssh/config文件,描述跳板机的树形级联拓扑结构(下面举例描述两条路径client->jumper1->jumper2a->jumper3->node1, client->jumper1->jumper2b->jumper4->node2|192.168.103.0/24, 注意,第一级jumper不带ProxyJump语句, Port为22也可以缺省不写):

    Host jumper1
      User <user_of_jumper1>
      Hostname <ip_of_jumper1>
    
    Host jumper2a
      User <user_of_jumper2a>
      Port 2222
      Hostname <ip_of_jumper2a>
      ProxyJump jumper1
    
    Host jumper2b
      User <user_of_jumper2b>
      Hostname <ip_of_jumper2b>
      ProxyJump jumper1
    
    Host jumper3
      User <user_of_jumper3>
      Hostname <ip_of_jumper3>
      ProxyJump jumper2a
    
    Host jumper4
      User <user_of_jumper4>
      Hostname <ip_of_jumper4>
      ProxyJump jumper2b
    
    Host node1 n1
      User <user_of_node1>
      Hostname <ip_of_node1>
      ProxyJump jumper3
    
    Host node2 n2
      User <user_of_node2>
      Hostname <ip_of_node2>
      ProxyJump jumper4
    
    Host 192.168.103.*
      User <username_on_target>
      ProxyJump jumper4
    • 参照步骤2把client公钥放置到每个叶子节点<node1, node2, 192.168.103.*>

    4. 验证如下命令,应可以无密码执行

    ssh node1
    ssh n1
    ssh node2
    ssh n2
    ssh 192.168.103.254
    scp myfile node1:./
    scp n1:./myfile /tmp/
    sftp n2
    sftp 192.168.103.2

    5. client设置ControlMaster高速复用ssh连接

    将如下加入到~/.ssh/config文件顶部,第一次ssh登录之后再次ssh登陆,几乎没有无延时。一段时间内重用连接不需要认证过程(对于密码登陆方式就是不要求输入密码了)

    Host *
      ServerAliveInterval 10
      TCPKeepAlive yes
      ControlPersist yes
      ControlMaster auto
      ControlPath ~/.ssh/master_%r_%h_%p

    6.增量同步远程机器的指定目录

    lftp这个老古董可以利用sftp经由ssh的config跳板通道,进行文件拷贝同步等动作。

    #把client本地/root/project/下的文件增量同步到远程n1上的/root/project/
    lftp sftp://n1 -e "mirror -R /root/project/"
    
    #把远端n1上的/root/project/下的文件增量同步到client本地/root/project/
    lftp sftp://n1 -e "mirror /root/project/"
    
    # lftp还有多线程参数加速同步或者下载,读者可自行发掘。

    来源:华为云社区  作者:divfor

  • 相关阅读:
    git报错:failed to push some refs to 'git@github.com:JiangXiaoLiang1988/CustomerHandl
    Form_通过Trace分析Concurrent和Form性能和异常详解(案例)
    PLSQL_Oracle Lock锁的处理(案例)
    Report_客制化报表输出Excel后去0问题(案例)
    DBA_Oracle DBA常用表汇总(概念)
    PLSQL_Oracle PLSQL处理日期方式大全(概念)
    PLSQL_Oracle PLSQL内置函数大全(概念)
    PLSQL_PLSQL中DML/DDL/DCL的概念和区分(概念)
    Shell_Oracle Erp基于主机文件Host开发详解(案例)
    Report_客制化以PLSQL输出HTML标记实现WEB报表(案例)
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13165776.html
Copyright © 2011-2022 走看看