zoukankan      html  css  js  c++  java
  • 【转】SSH穿越跳板机:一条命令跨越跳板机直接登陆远程计算机

    转自:http://mingxinglai.com/cn/2015/07/ssh-proxycommand/

    今天在公司搭建跳板机,遇到一个比较麻烦的问题,这里简单记录一下,希望对有相同问题的人有所帮助。

    我们公司的线上机器是下图这样的,A是我们本地的计算机,一般是windows系统,B是跳板机,C是目标机器,我们需要登录线上机器时,必须先登录跳板机,再登录目标机器。

    +-----+             +-----+             +-----+
    |     |             |     |             |     |
    |  A  +-----------> |  B  +-----------> |  C  |
    |     |             |     |             |     |
    +-----+             +-----+             +-----+

    注意:我们使用了ssh-agent转发功能,私钥只需要存在A上,B和C都只存放公钥,然后就可以先登录B,再登录C。

    由于大家都是在windows下办公,对于这种先登录跳板机再登录目标机器的方式并没有不满,但是,我们管理的机器网络结构越来越复杂了,变成了下面这样。我就不解释为什么我们公司会存在这么复杂的架构了,总之,在安全性与易用性之间,总是不能同时满足的,作为一线工程师,只能想办法在保证安全性的前提下,提高工作效率了。

    +-----+             +-----+             +-----+             +-----+
    |     |             |     |             |     |             |     |
    |  A  +-----------> |  B  +-----------> |  C  +-----------> |  D  |
    |     |             |     |             |     |             |     |
    +-----+             +-----+             +-----+             +-----+

    现在只希望能够在B直接跳到D,就像以前从B跳到C一样,不需要先跳到C,再跳到D这么麻烦,尤其在传文件的时候,如果需要先将文件传到C,再从C传到D,工作效率极低,并且容易出错。

    +-----+             +-----+             +-----+             +-----+
    |     |             |     |             |     |             |     |
    |  A  +-----------> |  B  +-------------------------------> |  D  |
    |     |             |     |             |     |             |     |
    +-----+             +-----+             +-----+             +-----+

    搜了很久,在这里找到比较好的答案。

    直接编辑~/.ssh/config文件,增加ProxyCommand选项,像下面这样:

    Host target.machine
        User          targetuser
        HostName      target.machine
        ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

    注意:~/.ssh/config文件有很多amazing的选项,具体可以参考这里:http://blog.tjll.net/ssh-kung-fu

    现在,只需要通过下面这样简单的语句登陆远程计算机:

    ssh target.machine

    还可以直接SCP过去,跳板机完全透明:

    scp ToCopy.txt target.machine:~

    大部分人到这一步就算大功告成了,但是,其实我们公司的网络架构是这样的:

                                             +-----+             +-----+
                                             |     |             |     |
                            +----------------------------------> |  D1 |
                            |                |     |             |     |
                            |                +-----+             +-----+
                            |
                            |
    +-----+              +--+--+             +-----+             +-----+
    |     |              |     |             |     |             |     |
    |  A  +------------> |  B  +-------------------------------> |  D2 |
    |     |              |     |             |     |             |     |
    +-----+              +--+--+             +-----+             +-----+
                            |
                            |
                            |                +-----+             +-----+
                            |                |     |             |     |
                            +----------------------------------> |  D3 |
                                             |     |             |     |
                                             +-----+             +-----+

    如图所示,我们有无数的跳板机,每台跳板机后面有若干台机器,因此,不适合编辑~/.ssh/ssh_config文件,需要用脚本进行封装,因此,我像下面这样使用ProxyCommand:

    • 直接跳到远程计算机

        ssh -o "ProxyCommand ssh -p 1098 lmx@proxy.machine nc -w 1 %h %p" -p 1098 lmx@target.machine
    • 拷贝文件到远程计算机

        scp -o "ProxyCommand ssh -p 1098 lmx@proxy.machine nc -w 1 %h %p" -P 1098 -r lmx@target.machine:~/rdsAgent .
    • 在远程计算机执行命令

        ssh -o "ProxyCommand ssh -p 1098 lmx@proxy.machine nc -w 1 %h %p" -p 1098 lmx@target.machine 'ip a'
  • 相关阅读:
    CSharpGL(36)通用的非托管数组排序方法
    CSharpGL(35)用ViewPort实现类似3DMax那样的把一个场景渲染到4个视口
    CSharpGL(34)以从零编写一个KleinBottle渲染器为例学习如何使用CSharpGL
    CSharpGL(33)使用uniform块来优化对uniform变量的读写
    CSharpGL(32)矩阵与四元数与角度旋转轴的相互转换
    CSharpGL(31)[译]OpenGL渲染管道那些事
    CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率
    Go如何使用数据库、缓存
    Go内置常用包
    从零开始基于go-thrift创建一个RPC服务
  • 原文地址:https://www.cnblogs.com/xuyuan77/p/10770201.html
Copyright © 2011-2022 走看看