通用线程: OpenSSH 密钥管理,第 3 部分 代理程序转(2)

认证代理程序转发

要了解认证转发工作的原理,让我们首先看一下一个假设情况,其中用户 drobbins 有一个称为 lappy 的可信的便携式电脑、一个称为 trustbox 的可信服务器和另外两个他必须访问的不可信系统,分别称为 notrust1 和 notrust2 。当前,他在所有这四台机器上都使用 ssh-agent 以及 keychain ,如下所示:


图 1. 运行在可信和不可信机器上的 ssh-agent

ssh-agent running on trusted and untrusted machines


这种方法所带来的问题是如果有人获取 notrust1 或 notrust2 的 root 访问权,那么这个人当然可以从现在易受攻击的 ssh-agent 进程中抽取密钥。为了解决这个问题, drobbins 停止运行不可信主机 notrust1 和 notrust2 上的 ssh-agent 和 keychain 。事实上,为了更为小心, drobbins 决定只在 lappy 上使用 ssh-agent 和 keychain 。这样限制了他解密的私钥的泄露,同时防止他的私钥被偷窃:


图 2. ssh-agent 只运行在 lappy 上;一个更安全的配置

ssh-agent running only on lappy; a more secure configuration


当然,这种方法带来的问题是 drobbins 现在只能从 lappy 建立无密码的连接。让我们看一下如何启用认证转发并解决这个问题。

假设所有机器都运行 OpenSSH 的最近版本,通过使用认证转发,我们能解决这个问题。认证转发允许远程 ssh 进程联系您正在本地可信机器上运行的 ssh-agent ― 而不要求在您正运行 ssh 的同一台机器上运行 ssh-agent 的一个版本。这通常允许您在单个机器上运行 ssh-agent (和 keychain ),并且这意味着源于这台机器的所有 ssh 连接(直接或间接)都将使用本地 ssh-agent 。

为了启用认证转发,我们在 lappy 和 trustbox 的 /etc/ssh/ssh_config 中添加了下面行。请注意:这是 ssh 的配置文件( ssh_config),而不是 ssh 守护进程 sshd 的配置文件( sshd_config):


清单 1. 将这行添加到 /etc/ssh/ssh_config 中
ForwardAgent Yes  

现在,为了利用认证转发, drobbins 可以从 lappy 连接到 trustbox ,然后在不提供任何连接的密码的情况下,从 trustbox 连接到 notrust1 。这两个 ssh 进程都“进入”运行在 lappy 上的 ssh-agent :


清单 2. 进入 lappy
$ ssh drobbins@trustbox Last login: Wed Sep 26 13:42:08 2001 from lappy Welcome to trustbox! $ ssh drobbins@notrust1 Last login: Tue Sep 25 12:03:40 2001 from trustbox Welcome to notrust1! $  

如果您尝试使用类似的配置,并发现代理程序转发不起作用,请尝试使用 ssh -A 替代原来单纯的 ssh 来明确启用认证转发。这里是当我们使用上面提到的认证转发而登录到 trustbox 和 notrust1 时,实现此操作的内部运行图:


图 3. 正在运作的代理程序转发

Agent forwarding in action


正如您看到的,当 ssh 连接到 trustbox 时,它维持与运行在 lappy 上的 ssh-agent 的连接。当产生从 trustbox 到 notrust1 的 ssh 连接时,这个新的 ssh 进程维持与以前 ssh 的认证连接,这样有效地延伸了链。这个认证链是否能延伸到 notrust1 以外的其它主机取决于 notrust1 的 /etc/ssh/ssh_config 是如何配置的。 只要启用了代理程序转发,通过使用在可信 lappy 上运行的 ssh-agent ,这个链上的所有部分都能认证。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://127.0.0.1/wyyxsg.html