在实际工作中,我们经常需要通过跳板主机来访问目标主机。这时候,如果我们使用 SSH 进行远程连接,就需要在本地计算机上使用 ssh-agent 来实现跳板登录。下面,本文将介绍如何使用 ssh-agent 实现跳板登录。

启动 ssh-agent

1
eval $(ssh-agent)

添加私钥到 ssh-agent

1
ssh-add /path/to/your/private/key

SSH 登录到跳板机

1
ssh -A xx@jumpserver

-A参数,表示开启agent forwarding

从跳板机登录到目标机器

1
ssh xx@destsever

简单方式

1
ssh -J xx@jumpserver xx@destsever

该命令中的-J参数是用来指定跳板机的,该命令执行后,ssh会帮我们先登录跳板机,然后再登录目标机器,一切都是自动的。 用-J参数指定跳板机还有一个好处就是在使用scp拷贝文件时更加方便。

1
ssh -J xx@jumpserver abc.txt xx@destsever:/home/xx/

SSH 登录原理

SSH 登录原理是基于公钥加密技术。在使用 SSH 登录时,用户会生成一对密钥,一把是公钥,一把是私钥。公钥可以被其他人获取到,但私钥是保密的。当一个用户想要登录到另一台计算机时,他会将自己的公钥发送给目标计算机。 当用户尝试连接到目标服务器时,服务器会向用户发送一段随机数据,称为“challenge”。用户使用私钥对challenge进行签名,然后将签名发送回服务器。如果服务器能够使用用户的公钥验证签名,那么用户就被授权访问该服务器。

SSH-Agent Forwarding,允许用户在跳板机上使用自己的本地SSH密钥对另一个服务器进行身份验证,而无需将私钥复制到跳板机上。当用户连接到跳板机时,该机器会将用户的SSH-Agent代理连接到目标服务器上。当用户连接到目标服务器时,目标服务器会向用户的SSH-Agent代理发送“challenge”,然后SSH-agent代理将使用本地私钥对“challenge”进行签名,并将签名发送回目标服务器进行验证。如果验证成功,用户就可以在目标服务器上进行操作。