前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSH代理(ssh-agent)及SSH代理转发(agent-forwarding)功能介绍

SSH代理(ssh-agent)及SSH代理转发(agent-forwarding)功能介绍

作者头像
yuanfan2012
发布2019-06-02 14:12:46
6.8K0
发布2019-06-02 14:12:46
举报
文章被收录于专栏:WalkingCloudWalkingCloud

结合下面拓扑图模拟演示并介绍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在登录时未自动启动,则可以使用该命令手动启动

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 删除

本文分享自 WalkingCloud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3)SSH密钥添加到代理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档