[转]ssh技巧之跳板机

转,原文:https://segmentfault.com/a/1190000020326898?utm_source=tag-newest

----------------------------------------------------

在管理外网服务器时,出于安全等因素的考虑,我们一般不会把所有服务器都设置成可ssh直连,而是会从中挑选出一台机器作为跳板机,当我们想要连接外网服务器时,我们要先通过ssh登录到跳板机,再从跳板机登录到目标服务器。

下面我们用实验来展示一下跳板机的登录流程。

在该实验中,我们用机器192.168.57.3来代表目标服务器,该服务器不能ssh直连,只能通过跳板机连接,用机器192.168.56.5来代表跳板机,该跳板机可以用ssh直接连接。

为了方便测测试,我们先把我们自己电脑上的ssh的public key拷贝到跳板机及目标服务器的.ssh/authorized_keys文件里,这样我们就可以无密码登录了。

下面是测试流程:

  • ssh登录跳板机。
$ ssh u3@192.168.56.5
Last login: Sun Sep  8 19:51:48 2019 from 192.168.56.1
u3@h3:~$
  • 从跳板机登录到目标服务器。
u3@h3:~$ ssh -o "PasswordAuthentication no" u2@192.168.57.3
u2@192.168.57.3: Permission denied (publickey,password).

该命令中的参数 -o "PasswordAuthentication no" 表示不使用密码登录。

因为我们已经把我们电脑上的ssh的public key拷贝到目标机器的.ssh/authorized_keys文件里了,理论上来说,应该是可以登录成功的,但上面的命令却显示登录失败,哪里错了呢?

其实很简单,ssh的key登录是要public key和private key成对存在的,虽然public key已经拷贝到了目标机器,但我们此时是在跳板机上,而跳板机上并没有我们自己机器的private key。

那我们把private key拷贝到跳板机可以不?

不行,因为private key一旦拷贝到跳板机,那其他能登录到跳板机的人就都可以拿到我们的private key了,这非常不安全。

那怎么办呢?

这个问题其实可以通过ssh的agent forwarding来解决,我们先看下具体操作,然后再讲解其工作原理。

我们先退回到自己的机器上,然后执行以下流程:

  • 开启ssh-agent,然后将我们的private key添加到ssh-agent中。
$ eval $(ssh-agent)
Agent pid 8350
$ ssh-add
Identity added: /home/yt/.ssh/id_rsa (yt@arch)
Identity added: /home/yt/.ssh/id_ed25519 (yt@arch)
  • ssh登录到跳板机(不过此次加上了-A参数,表示开启agent forwarding)。
$ ssh -A u[email protected]5
Last login: Sun Sep  8 21:13:01 2019 from 192.168.56.1
[email protected]:~$
  • 从跳板机登录到目标机器。
u3@h3:~$ ssh u2@192.168.57.3
Last login: Sun Sep  8 20:45:03 2019 from 192.168.57.4
u2@h2:~$

由上可见,这次从跳板机登录目标机器是成功了的,原因就是我们开启了agent forwarding,但它是怎么帮助我们从跳板机上登录目标机器的呢?

当我们在跳板机上ssh登录目标机器时,目标机器会要求跳板机用对应的ssh的private key做认证,但跳板机是没有这个key的,这个key保存在我们自己的电脑上,又因为我们在从自己的电脑ssh登录跳板机时开启了agent forwarding,所以跳板机会把该认证请求转发给我们自己的电脑,我们自己电脑在收到这个认证请求时,会找ssh-agent进程进行认证,而又因为开始的时候,我们通过ssh-add命令将我们的private key加入到了ssh-agent中,所以,此次认证是成功的,我们的机器把认证结果再转给跳板机,跳板机再将该结果转给目标机器,就这样,在跳板机没有我们的ssh的private key的情况下,登录目标机器还是成功了。

这个就是跳板机的登录流程,不过,这只是一种最基本的方式,其实还有更简单的方式,我们还是用实验看下。

还是先退回到我们自己的机器,然后执行下面的命令:

$ ssh -J [email protected]192.168.56.5 [email protected]192.168.57.3
Last login: Sun Sep  8 21:09:13 2019 from 192.168.57.4
[email protected]:~$

喔,居然用一条命令就直接成功了,根本就没有经历从跳板机到目标机器的过程。

该命令中的-J参数是用来指定跳板机的,该命令执行后,ssh会帮我们先登录跳板机,然后再登录目标机器,一切都是自动的。

用-J参数指定跳板机还有一个好处就是在使用scp拷贝文件时更加方便。

如果是普通方式,我们要先将文件拷贝到跳板机上,再从跳板机上拷贝到目标机器,非常麻烦,如果使用-J参数,我们用一条命令就可以搞定了。

$ scp -J u3@192.168.56.5 abc.txt u2@192.168.57.3:/home/u2/
abc.txt 

完美!

有关ssh跳板机的知识就讲到这吧,希望对大家有所帮助。

完。

更多原创文章,请关注我微信公众号:

原文地址:https://www.cnblogs.com/oxspirt/p/12152363.html

时间: 2024-10-09 22:21:06

[转]ssh技巧之跳板机的相关文章

ssh建立安全跳板机,方便外网登录内网机器

环境centos7两台 跳板机: eth0:X.X.X.X eth1:10.165.93.161 内网主机:eth0:10.165.93.162 ssh -4fg -L 2222:10.165.93.162:22 -N localhost 解析: -4  以ipv4地址格式 -f  后台运行 -g  允许远程主机进行连接本地端口2222 -L [bind_address:]port:host:hostport -N  Do not execute a remote command.  This

Navicat for Mysql SSH tunnel 用跳板机解决方案

Navicat Mysql SSH tunnel不能使用跳板机,对于需要跳板机登录的主机,他自带的SSH Tunnel就是鸡肋了.其实从原理上分析,根本不需要开启他得SSH Tunnel,使用本机强大SSH端口转发,加上跳板代理,即可完美解决. 1.先取消已经设置的SSH Tunnel,如下图都清空 2.本地配置好跳板机,跳板机文章很多,百度即可.比如我的: 替换Host , User, 123.45.67.89,这些换成你自己对应的参数: vi ~/.ssh/config Host *.myd

mysql ssh 跳板机(堡垒机???)连接服务器

跳板机(Jump Server),也称堡垒机,是一类可作为跳板批量操作远程设备的网络设备,是系统管理员或运维人员常用的操作平台之一. 正常的登录流程 使用ssh命令登录跳板机: 登录跳板机成功后,在跳板机分配的终端中使用ssh命令再登录开发机,跳板机和开发机之间采用带密码的ssh验证,因此需要输入ssh私钥的密码. ssh隧道(通过跳板机)连接mysql 案例: A服务器   B服务器   C服务器mysql 现在mysql服务器C只能通过内网访问,B服务器就能通过内网连接访问到mysql A服

什么是跳板机(堡垒机)

堡垒机(跳板机)? 现在一定规模互联网企业,往往都拥有大量服务器,如何安全并高效的管理这些服务器是每个系统运维或安全运维人员必要工作.现在比较常见的方案是搭建堡垒机环境作为线上服务器的入口,所有服务器只能通过堡垒机进行登陆访问. ======================================================================================================= 因此需要通过终端连接到远程开发机进行工作,由于安全等因素,登录

Navicat配置跳板机连接数据库

需求 在开发中,有时候我们会碰到这么一个情况.数据库的服务器在内网,如果想连接,必须得先ssh登陆到跳板机,然后在跳板机ssh到达数据库所在服务器,进而操作数据库.遗憾的是,如果跳板机和数据库所在服务器如果都没有像Navicat这种数据库客户端连接工具,那么操作数据库会很吃力,只能通过敲命令行的方式进行操作.那么接下来,教大家一个方法,可以通过本机的数据库客户端工具直接连接到内网服务器的数据库. 实现 第一步:在SecureCRT 或者Xshell等工具上配置跳板机的地址,保证能连上跳板机服务器

ssh远程登陆脚本(带跳板机)

mac自带的终端不太好用,被推荐了一个iterm2的终端替代工具,确实比自带的终端好用不少.下面记录下通过脚本一键远程登录的过程: 下载地址:http://m4.pc6.com/xuh3/iTerm2.zip 首先,准备好登陆脚本 #!/usr/bin/expect -f set user xxx set host 127.0.0.1 set port 22 #如果是默认端口可以不指定 set password xxx set timeout -1 spawn ssh -p $port [ema

Linux生成ssh公钥免密码登录远程主机和Xshell跨跳板机登录

##Linux生成ssh公钥免密码登录远程主机: 1:ssh-keygen -t rsa#生成密钥2:ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]#把本机的公钥追到远程主机172.16.205.117(登录账户hejm)的 ~/.ssh/authorized_keys 里注:如果ssh的端口不是22,可用参数p指定对应端口ssh-copy-id -i ~/.ssh/id_rsa.pub -p 23 [email protected] 或者通

搭建ssh跳板机

搭建ssh跳板机 环境介绍: [[email protected] ~]# cat /etc/redhat-release  CentOS release 6.6 (Final) [[email protected] ~]# uname -r 2.6.32-504.el6.x86_64 //准备2-3台虚拟机,至少2台. 1.在所有机器上创建跳板机用户 [[email protected] ~]# useradd tb [[email protected] ~]# echo "123.com&q

jmeter连接配置带跳板机(SSH)的mysql服务器

jmeter连接配置mysql服务器时,如果数据库服务器没有通过ssh连接,则只需要配置相应的jdbc参数就可以了,即请求域名或ip地址:3306,如果数据库服务器是通过SSH连接的,那需要通过中间远程连接工具来登录,此处使用的远程连接工具为Putty,配置的时候需要将数据库的ssh->tunnel中的请求域名先映射到本地3306的端口(一般mysql的请求端口设置为3306,只是符合大众流~~~),然后通过ssh的服务器ip及端口来访问,具体的配置请参考如下: 1.首先,下载并打开Putty喽