结合下面拓扑图模拟演示并介绍SSH代理(ssh-agent)及SSH代理转发(agent-forwarding)功能
Server_A: 192.168.31.80
Server_B: 192.168.31.111/10.112.10.249 (双网卡)
Server_C: 10.112.10.250
从拓扑图上可以看出,欧博官网由于Server_C与PC机IP网络层面上无法直接互通,若想SSH登录到Server_C,只能通过Server_B进行代理中转
需求如下:
1)PC机通过SecureCRT登录Server_A,要实现Server_A能SSH免密登录到Server_B,且不用输入passphrase密钥密码,这时需要Server_A通过ssh-keygen生成一对公钥与私钥,欧博并将公钥拷贝到Server_B上
2)Server_A上SSH登录Server_C只能通过Server_B跳转,但是我又不想Server_B也通过ssh-keygen生成另外一对公钥与私钥(用于Server_B免密码登录登录Server_C),我想复用Server_A原先生成的那一对公钥与私钥,来实现免密码登录Server_C,这时需要将Server_A的公钥在Server_C上也保存一份
如何实现这两个需求呢?
第一个需求中会用到SSH代理(ssh-agent)功能
第二个需求实现需要用到SSH代理转发(agent-forwarding)功能
下面一步一步边动手边介绍相关基本概念
1、首先SecureCRT登录Server_A,ssh-keygen -t rsa并输入密钥密码passphrase
2、可以通过scp或者ssh-copy-id等方式拷贝公钥到Server_B
若要将Server_A的公钥也拷贝到Server_C,欧博娱乐可进行如下操作
3、可以看到每次在Server_A上SSH登录Server_B时都会提示要求输入密钥密码
4、若不想每次都输入密钥密码,这时需要用到ssh-agent帮助我们保存密钥密码到内存
所谓ssh-agent是一个帮助程序,可以跟踪用户的身份密钥及其密码。然后,代理可以使用密钥登录其他服务器,而无需用户再次键入密码或密码。这实现了一种单点登录(SSO)形式,原文如下
The ssh-agent is a helper program that keeps track of user's identity keys and their passphrases. The agent can then use the keys to log into other servers without having the user type in a password or passphrase again. This implements a form of single sign-on (SSO).
下面介绍如何进行ssh-agent的操作
1)如果ssh-agent在登录时未自动启动,欧博allbet则可以使用该命令手动启动
eval `ssh-agent`
2)检查SSH_AUTH_SOCK环境变量的值。如果已设置,则ssh-agent代理可正在运行
3)SSH密钥添加到代理默认情况下,代理使用存储在.ssh用户主目录下的目录中的SSH密钥
也可以指定私钥文件 ssh-add ./.ssh/id_rsa
然后输入之前设置的密钥密码passphrase,这时密钥密码就保存到内存中了
4)通过ssh-add -l命令将列出代理当前可访问的私钥
5、接下来直接登录Server_B就不需要输入passphrase密钥密码了
接下来需求2,就需要用到Agent-Forwarding(代理转发)
原理如下:Server_B相当于一个代理服务器,当Server_B SSH登录Server_C时,Server_C对Server_B提出认证要求,其实这时Server_B是将认证请求转发给了Server_A,Server_A使用本地ssh-agent代理处理请求后,处理结果交给Server_B这个代理,最终返回到Server_C上,这样实现转发传递的过程
具体操作可以两种方式实现
1、先ssh -A root@192.168.31.111
再ssh -A root@10.112.10.250
-A选项 启用agent-forwding
-A Enables forwarding of the authentication agent connection.
2、修改Server_A的/etc/ssh/ssh_config的方式
将 ForwardAgent no改为ForwardAgent yes
且Server_B的/etc/ssh/sshd_config 中AllowAgentForwarding 要为yes
一般默认为yes,不用修改(sshd_config与ssh_config是两个不同的文件,一个服务端配置文件,一个客户端配置文件)
接下来直接ssh 到Server_B,然后Server_B可以复用Server_A的密钥对直接免密登录Server_C
不用加-A参数
更进一步,可以直接使用-t参数
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
ssh -t 192.168.31.111 ssh 10.112.10.250
再进一步延伸,将代理转发用于scp,比如将Server_B上的文件直接scp远程拷贝到Server_C的某个目录,不用输入任何密码或密钥密码
scp root@192.168.31.111:~/mysql*.tar.gz root@10.112.10.250:/home
以上就是SSH代理(ssh-agent)及SSH代理转发(agent-forwarding)功能介绍与实践过程
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除
ssh
linux
本文分享自 WalkingCloud 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。