lede 命令 启用 ssh_SSH跳板机

跳板机

出于安全等因素的考虑,我们一般不会把所有服务器都设置成可 SSH 直连,而是会通过一台机器作为跳板机,跳板机就相当于大门,你想要连接其他服务器的时候,必须要先穿过大门。先通过 SSH 登录到跳板机,再从跳板机登录到目标服务器。

假设

假设在某个机房中,我们用机器 A 来代表目标服务器,该服务器不能 SSH 直连,只能通过跳板机连接,用机器 B 来代表跳板机,我们是可以 SSH 直连跳板机的。

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

我们尝试:

ssh -u username@B

然后再从跳板机登录到目标服务器

ssh -o "PasswordAuthentication no" username@A

参数 -o "PasswordAuthentication no" 表示不使用密码登录

但是结果是

Permission denied(publickey,password)

这是因为 SSH 的 key 登录是要 public key 和 private key 成对存在的,虽然 public key 已经拷贝到了目标机器,但是当我们已经登录到跳板机上即机器 B 上时会向机器 A 也进行 SSH 登录,而跳板机上并没有我们自己机器的 private key。

可以如果我们把自己电脑的 private key 复制到跳板机上的话,那其他登录到跳板机上的人就可以拿到我的 private key 了,这是不安全的。

这个时候我们需要通过 SSH 的 agent forwarding 来解决。

解决方法

回到我们自己的机器上,进行命令

eval $(ssh-agent)

ssh-add

登录到跳板机

ssh -A username@B

-A 参数表示开启 agent forwarding

从跳板机登录到目标机器

ssh username@A

这样就可以从跳板机登录目标机器了,原因就是我们开启了 agent forwarding。

数据流向

当我们在跳板机上 SSH 登录目标机器时,目标机器会要求跳板机用对应的 SSH 的 private key 做认证,但是跳板机没有我们自己电脑的 private key,但是又因为我们从自己的电脑 SSH 登录到跳板机的时候启用了 agent forwarding,所以跳板机会把认证请求转发给我们自己的电脑。我们自己的电脑在收到这个请求的时候,就会在 shh-agent 进程进行认证,又因为我们已经通过 ssh-add 命令将我们的 private key 加到了 ssh-agent 中,所以认证会成功。最后我们机器把认证结果传回给跳板机,跳板机再把结果转回给目标机器,这样就完成了在跳板机没有我们的 SSH 的 private key 的情况下,还是能够成功登录目标机器。

另一种方法(简写)

回到我们自己的机器上,执行命令

ssh -J username@B username@A

一条命令就可以直接登录到目标机器。

参数 -J 是用来指定跳板机的,SSH 会帮我们先登录到跳板机,然后再登录目标机器。

参考

人类身份验证 - SegmentFault​segmentfault.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值