首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

OpenSSH 密钥管理:ssh-agent跟keychain

2013-07-09 
OpenSSH 密钥管理:ssh-agent和keychain双击代码全选双击代码全选双击代码全选(enter passphrase)  正如您

OpenSSH 密钥管理:ssh-agent和keychain
双击代码全选双击代码全选双击代码全选(enter passphrase)

  正如您所看到的, ssh-add 要我的密码短语来对专用密钥进行解密并存储在 ssh-agent 的高速缓存中以备使用。一旦您已经用 ssh-add 把专用密钥(或多个密钥)添加到 ssh-agent 的高速缓存中, 并在当前的 shell 中(如果您在 ~/.bash_profile 中启动 ssh-agent ,情况应当是这样)定义 SSH_AUTH_SOCK,那么您可以使用 scp 和 ssh 同远程系统建立连接而不必提供密码短语。

  ssh-agent 的不足之处

  ssh-agent 确实棒,但是其缺省配置还是会留给我们一些小小的不便。让我们来看一下这些不足吧。

  首先,~/.bash_profile 中的 eval `ssh-agent` 使每次登录会话都会启动一个新的 ssh-agent 副本;这不仅仅是有一丁点儿浪费,而且还意味着您得使用 ssh-add 向每个新的 ssh-agent 副本添加专用密钥。如果您只想打开系统上的一个终端或控制台,这没什么大不了的,但是我们中大多数人打开相当多的终端,每次新打开控制台都需要键入密码短语。从技术角度讲,既然一个 ssh-agent 进程的确应当足够了,要是我们还需这样做,这毫无道理。

  有关 ssh-agent 的缺省设置的另外一个问题是它同 cron 作业不兼容。由于 cron 作业是 cron 进程启动的,这些作业无法从它们的环境中继承 SSH_AUTH_SOCK 变量,因而也无从知道 ssh-agent 进程正在运行以及如何同它联系。事实证明这个问题也是可以修补的。

  开始用到 keychain

  为了解决这些问题,我编写了一个有用的 ssh-agent 前端,它基于 bash,叫做 keychain 。 keychain 的特别之处在于它允许 每个系统使用一个 ssh-agent 进程,而非每次登录会话。这意味着您只需对每个专用密钥执行一次 ssh-add ,就一次。正如我们稍后将要看到的一样, keychain 甚至有助于优化 ssh-add ,而这只要它试图向那些正在运行的 ssh-agent 添加其高速缓存中没有的专用密钥。

热点排行