关于ssh agent

有 A、B、C三台服务器,A可以直接通过密钥ssh到B,但不能直接登录到C,B可以登录C,但要求是用A的密钥而不是用B自己的密钥,现在的要求就是A登录B后可以直接通过A密钥登录ssh到C。B其实就是个跳板机啦,原理就懒得搞了,直接说实现步骤吧。

step0 生成ssh密钥对

ssh-keyget [-t 算法,默认rsa] [-C "密钥注释,默认为计算机名"]

step1 导入公钥

将A的公钥同时加入B、C的ssh中,即将id_rsa.pub 的内容复制到B和C中的/home/用户/.ssh/authorized_keys中新起一行

step2 设置ssh agent

如果在生成密钥时有设置过密码,那再登录到B时也需要输入密码,这时可以开启ssh agent即可,在A上执行如下操作

如果为linux

$ eval `ssh-agent`
$ ssh-add [私钥id_rsa路径]

如果为windinws 管理员运行cmd

> Set-Service -Name ssh-agent -StartupType automatic
> ssh-agent

step3 登录

登录是加上 -A 参数就行

$ ssh -A [用户:]目标ip 

也可以在.ssh/config中指定目标地址使用 ssh agent

Host 目标地址(跳板机B)
ForwardAgent yes

这样登录B后就可以直接登录C了,而且都是免输入密码

另一方式实现相同

据说用ssh agent fowarding 的方式不安全,推荐用另一种ProxyCommand 代理的方式来登录 目标服务器

直接在 A上的.ssh/config设置

Host jumpB
User 用户名
Hostname 跳板机B服务器的ip
#Port 端口
#ForwardAgent yes
IdentityFile ~/.ssh/id_rsa

Host C
User root
Hostname 目标C服务器的ip
#Port 端口
ProxyCommand ssh -q -W %h:%p jumpB(同上面的Host名一样 )
#IdentityFile ~/.ssh/id_rsa

登录

$ ssh C  

就可直接登录了,据说还更安全。。。。。。

参考

https://cloud.tencent.com/developer/article/1441212

https://blog.wu-boy.com/2016/10/ssh-agent-forwarding-proxycommand-tutorial/

发表回复

您的电子邮箱地址不会被公开。