在这一系列的第三篇文章中,Daniel Robbins 向您显示了如何利用 OpenSSH 代理程序连接转发来增强安全性。他还共享 keychain shell 脚本近期的改进。
我们中的许多人都使用非常优秀的 OpenSSH 作为古老的 telnet 和 rsh 命令的替代品,OpenSSH 不仅安全而且是加密的。OpenSSH 更吸引人的特性之一是它能够使用以一对互补的数字式“密钥”为基础的 RSA 和 DSA 认证协议来认证用户。RSA 和 DSA 认证承诺不必提供密码就能够与远程系统建立连接,这是其主要魅力之一。有关更多背景资料,请参阅关于 OpenSSH 密钥管理的本系列文章中以前的几篇,分别包括 RSA/DSA 认证(第 1 部分)和 ssh-agent 和 keychain(第 2 部分)。
由于第 2 部分发表在 2001 年 9 月的 developerWorks上,并且稍后在 Slashdot 和 Freshmeat(请参阅本文后面的 参考资料,获取到这些站点的链接)上引用了此文,因此,许多人已经开始使用 keychain ,而且它已经做了许多更改。我收到了世界各地开发人员编写的约 20 个高质量的补丁程序。我已将其中许多补丁代码合并入 keychain 源码中,它目前的版本是 1.8(请参阅 参考资料)。我真诚地感谢所有提交补丁程序、错误报告、功能请求及感谢信的那些人。
加强 ssh 安全性
在 上篇文章中,我花了一些时间来讨论运行 ssh-agent 在安全性方面的利弊。第二篇文章发表在 developerWorks的几天后,我收到来自 Sarnoff Corporation 的 Charles Karney 的一封电子邮件,他非常礼貌地通知了我 OpenSSH 新的认证代理程序转发的能力,我们将会简要地讨论这一能力。另外,Charles 强调:在 不可信机器上运行 ssh-agent 是十分危险的:如果有人成功地获取系统上的 root 访问权,那么就 能从 ssh-agent 中抽取您解密的密钥。即使抽取密钥有一定的困难,但是它还是在专业的解密高手的能力范围之内。而且,基本事实就是偷窃私钥是 可能的,这意味着我们应首先采取措施来防止这种情况的发生。
为了简单描述保护私钥的策略,首先必须把我们访问的机器归为两种类型中的一类。如果特定主机是安全性良好或是孤立的 ― 要成功获取主机的 root 访问权几乎不可能 ― 那么,那台机器应被认为是 可信主机。不过,如果许多其他人使用这台机器或者您怀疑系统的安全性,那么这台机器应被认为是 不可信主机。为防止您的私钥被他人抽取,绝对不应在不可信主机上运行 ssh-agent (和由此启动的 keychain )。 那样的话,即使系统安全性受到威胁,由于 ssh-agent 没有运行,闯入者在第一时间内也不能抽取密钥。
但是,这产生了一个问题。如果不能在不可信主机上运行 ssh-agent ,那么如何从这些系统上建立安全的、无密码的 ssh 连接呢?答案是:只在 可信主机上使用 ssh-agent 和 keychain ,并利用 OpenSSH 新的 认证转发能力将无密码的认证扩展到任何不可信主机上。简略地说,就是通过允许远程 ssh 会话来联系运行在可信系统上的 ssh-agent ,使认证转发工作。