有 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
就可直接登录了,据说还更安全。。。。。。