【转】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 [email protected].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 [email protected] nc -w 1 %h %p" -p 1098 [email protected].machine
  • 拷贝文件到远程计算机
      scp -o "ProxyCommand ssh -p 1098 [email protected] nc -w 1 %h %p" -P 1098 -r [email protected].machine:~/rdsAgent .
  • 在远程计算机执行命令
      ssh -o "ProxyCommand ssh -p 1098 [email protected] nc -w 1 %h %p" -p 1098 [email protected].machine ‘ip a‘

原文地址:https://www.cnblogs.com/xuyuan77/p/10770201.html

时间: 2024-10-09 02:40:14

【转】SSH穿越跳板机:一条命令跨越跳板机直接登陆远程计算机的相关文章

linux之50条命令详解

1. tar tar命令文件压缩与解压 tar命令可以为linux的文件和目录创建档案.利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件.tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案.利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的. 首先要弄清两个概念:打包和压缩.打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大的文件通过一些压

Ubuntu常用200条命令

   查看软件xxx安装内容:dpkg -L xxx 查找软件库中的软件:apt-cache search 正则表达式 查找软件库中的软件:aptitude search 软件包 查找文件属于哪个包:dpkg -S filename 查找文件属于哪个包:apt-file search filename 查询软件xxx依赖哪些包:apt-cache depends xxx 查询软件xxx被哪些包依赖:apt-cache rdepends xxx 增加一个光盘源:sudo apt-cdrom add

一条命令搞垮MongoDB实例

一条命令搞垮MongoDB实例 背景 Part1:写在最前 在副本集架构中,我们会经常通过rs.add(),rs.remove()命令来调整后台数据库架构,在本案例中,我们异常的触发到了一个MongoDB的BUG,并尽快的找到了官方的人进行咨询.在生产环境中,我们做实例迁移,将研发自行维护的MongoDB副本集迁移至DBA管理,由于硬件和版本都不符合规范,因此我们对集群先进行了升级处理,又使用了rs.add()和rs.remove()来完成数据库的迁移工作. Part2:背景 在研发自行维护的数

断网不要慌,掌握这两条命令,一分钟就可以定位网络问题

对于局域网而言,断网基本上都是灾难性的,领导.同事立刻唉声占道.催个不停.作为一名网络管理人员,不可避免经常会碰到断网的情况.保持冷静的头脑,迅速的定位问题所在,可以说是一个网管必备的基本素养. 本文中,我将介绍几条dos下的命令,掌握好这几条命令,一分钟内就可以定位断网原因. 1. 首先要看ipconfig 在dos窗口下,输入ipconfig,可以查看到本机"手动设置"或者"自动获取"的IP地址.如图: 这里有几种可能性: IP地址和网关地址都正确.(不存在问题

https://www.jqhtml.com/30047.html strace + 命令: 这条命令十分强大,可以定位你程序到底是哪个地方出了问题

https://www.jqhtml.com/30047.html 我的Linux手册 服务器 浏览数:72 2019-1-30 原文链接 基础安装 # CentOS sudo yum install epel-release 命令行Tips 进程及端口 # 查看端口占用情况 netstat -ap | grep 端口号   # 查看某一个端口 netstat -ntlp top -p 进程ID:查看进程的实时情况,包括内存大小,内存占用率.CPU占用率,运行时间 cat /proc/进程ID/

shell练习(2)--awk统计ip访问量(一条命令)

对下面的1.log 文件进行统计, 要求: 统计出每个IP的访问量有多少? 提示,先awk过滤出ip,然后进行排序,统计重复数. 只用一条命令即可 awk '{STAT[$1]++};END{for(A in STAT) print STAT[A], A}' 1.log|sort -nr|head -10 1.log   的大致格式: 112.111.12.248 - [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com "/seccode.php?u

【重点】初窥Linux 之 我最常用的20多条命令

玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下man,他会帮你解决不少的问题.然而每个人玩Linux的目的都不同,所以他们常用的命令也就差异非常大,而我主要是用Linux进行C/C++和shell程序编写的,所以常用到的命令可以就会跟一个管理Linux系统的人有所不同.因为不想在使用是总是东查西找,所以在此总结一下,方便一下以后的查看.不多说,

Linux 最常用的20条命令

1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: [plain] view plain copy print? cd /root/Docements # 切换到目录/root/Docements cd ./path          # 切换到当前目录下的path目录中,"."表示当前目录 cd ../path         # 切换到上层目录中的path目录中,"..&q

NETSH WINSOCK RESET这条命令的含义和作用?

简单来说netsh winsock reset命令含义是重置 Winsock 文件夹.假设一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就须要用netsh winsock reset命令来重置Winsock文件夹借以恢复网络. winsock是windows网络编程接口,从Windows XP SP2開始内置了一条命令使用netsh可以对该接口进行修复. netsh是一个可以通过命令行操作差点儿全部网络相关设置的接口.比方设置IP,DNS,网卡,无线网络等.netsh wi