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

OpenSSH 密钥 ssh-agent 跟 keychain 摘记

2013-02-15 
OpenSSH 密钥 ssh-agent 和 keychain 摘记% ssh-agentSSH_AUTH_SOCK/tmp/ssh-XX4LkMJS/agent.26916 expo

OpenSSH 密钥 ssh-agent 和 keychain 摘记
% ssh-agentSSH_AUTH_SOCK=/tmp/ssh-XX4LkMJS/agent.26916; export SSH_AUTH_SOCK;SSH_AGENT_PID=26917; export SSH_AGENT_PID;

运行ssh-agent?后对ssh-agent?的输出进行计算

eval `ssh-agent`

shell 以这种调用方式(使用反引号,而不是普通的单引号)设置并导出 SSH_AGENT_PID 及 SSH_AUTH_SOCK 变量,使这些变量对于您在登录会话期间启动的所有新进程都可用。启动?ssh-agent?的最佳方式就是把上面这行添加到您的 ~/.bash_profile

ssh-add?把我的 ~/.ssh/identity 专用 RSA 密钥添加到?ssh-agent?的高速缓存中

# ssh-add ~/.ssh/identityNeed passphrase for /home/drobbins/.ssh/identityEnter passphrase for /home/drobbins/.ssh/identity (enter passphrase)

这样就可以使用?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:

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

? ? ? keychain从 ~/.bash_profile 中启动时,?keychain?将首先查看?ssh-agent?是否已经在运行了。如果没有,它就启动?ssh-agent?并把重要的 SSH_AUTH_SOCK 和 SSH_AGENT_PID 变量记录在 ~/.ssh-agent 文件中,一方面为了安全而保存,另一方面也是为了以后的使用。这是启动?keychain?的最佳途径;同使?ssh-agent?一样,我们在 ~/.bash_profile 内部执行必要的配置:

#!/bin/bash#example ~/.bash_profile file/usr/bin/keychain ~/.ssh/id_rsa#redirect ~/.ssh-agent output to /dev/null to zap the annoying#"Agent PID" messagesource ~/.ssh-agent > /dev/null

? ? ?对于?keychain?用 source 命令读入并执行 ~/.ssh-agent 文件,而不是直接使用?ssh-agent?时所做的对输出进行计算。但是,结果是一样的:定义了非常重要的 SSH_AUTH_SOCK,而且正运行?ssh-agent?以备使用。同时,因为 SSH_AUTH_SOCK 被记录在 ~/.ssh-agent 里,只要用 source 命令读入并执行 ~/.ssh-agent 文件,就可以轻易的把 shell 脚本及 cron 作业同?ssh-agent?连接起来。?keychain?本身也利用了这个文件;?keychain?启动时,它会查看现有的?ssh-agent?是否正在运行。如果是,则它使用 ~/.ssh-agent 文件来获得适当的 SSH_AUTH_SOCK 设置,这样就使?keychain?能使用现有的代理程序而不必新启动一个。只有在 ~/.ssh-agent 文件无效(指向一个不存在的?ssh-agent?)或 ~/.ssh-agent 文件本身不存在时,keychain?才会启动新的?ssh-agent?进程。

?安装?keychain

下载地址:http://www.funtoo.org/wiki/Keychain

?

bzip2 -d  keychain-2.7.1.tar.bz2tar -xvf keychain-2.7.1.tarinstall -m0755 keychain /usr/bin#Add the following to ~/.bash_profile/usr/bin/keychain ~/.ssh/id_rsa ~/.ssh/id_dsasource ~/.ssh-agent > /dev/null#sourcing ~/.bashrc is a good thingsource ~/.bashrc
?您一为每次登录时调用?keychain?配置好了 ~/.bash_profile,就请先退出再登录回来。在您再次登录时,?keychain?将启动?ssh-agent?,并记录下 ~/.ssh-agent 中的代理程序环境变量设置,然后提示您输入在 ~/.bash_profile 中的?keychain?命令行指定的所有专用密钥的密码短语

?

您一输入密码短语,您的专用密钥就会被高速缓存,同时?keychain?将退出。接着,用 source 命令读入并执行 ~/.ssh-agent,初始化您的登录会话以便同?ssh-agent?一起使用。现在,如果您退出,然后再登录回来,将发现?keychain?会找到现有的?ssh-agent?进程;在您退出时,它并没有终止。此外,?keychain?将验证您指定的专用密钥是否已经在?ssh-agent?的高速缓存中了。如果没有,那么将会提示您输入正确的密码短语,但如果一切进展顺利,则现有?ssh-agent?仍包含有您以前添加的专用密钥;这意味着不会提示您输入密码?http://www.ibm.com/developerworks/cn/linux/security/openssh/part2/index.htmlhttp://www.ibm.com/developerworks/cn/linux/security/openssh/part3/index.html

热点排行