Hadoop学习入门(二)——部署关键问题1:OpenSSH 密钥管理(2)

什么是ssh-agent

ssh-agent(专用密钥高速缓存),它是为了RSA和DSA密钥而设计的特殊程序。ssh-agetn是一个长时间持续运行的daemon(守护进程),它的作用就是对解密的专用密钥进行高速缓存。

ssh包含的内建支持允许它和ssh-agent通信,这样运行ssh不必每次连接的时候都提示您要密码才能获取解密用的专用密钥。对于ssh-agent,使用ssh-add把专用密钥加入到ssh-agent的专用缓存中。这样ssh就可以直接从ssh-agent中获取到专用密钥,就不会再提示你输入密码短语。

ssh-agent的使用

在ssh-agent启动的时候,在脱离shell,在后台运行之前会打印出一些重要的环境变量

% ssh-agent
			

ssh-agent会打印出一些环境变量,如下图所示

我们不难发现,这这个过程对两个环境变量进行了设置SSH_AUTH_SOCK,SSH_AGENT_PID;内含的export命令使得这些环境变量对之后运行的附加命令都有效,不过此刻只是输出到stdout,只有当shell真正进行计算的时候,这些才会被真正执行。如果我们一开始就要使之确定,应该这样使用ssh-agent

% eval ‘ssh-agent‘
			

这个命令在执行ssh-agent后对ssh-agent进行输出计算,SSH_AUTH_SOCK,SSH_AGENT_PID被进行了设置与导出,这些变量在会话登录的阶段产生的新进程都可以用。

启动ssh的最佳方式

启动 ssh-agent 的最佳方式就是把上面这行添加到您的 ~/.bash_profile 中;这样,在您的登录 shell 中启动的所有程序都将看到环境变量,而且能够定位 ssh-agent ,并在需要的时候向其查询密钥。尤其重要的环境变量是 SSH_AUTH_SOCK;SSH_AUTH_SOCK 包含有 ssh 和 scp 可以用来同 ssh-agent 建立对话的 UNIX 域套接字的路径。


使用ssh-add

ssh在启动的时候,高速缓存中不会存有专用密钥的信息,所以我们需要将专用密钥(一个或多个)加入到高速缓存中,如下图示意

% ssh-add id_rsa
			


ssh-add需要我们的密码短语对专用密钥进行解密,并存储在ssh-agent的高速缓存中以备使用,一旦您使用了ssh-add把多个专用密钥添加到ssh-agent高速缓冲中去,并在当前的shell中定义了之前我们提到的SSH_AUTH_SOCK,那么这时候使用scp和ssh痛远程系统建立链接就不用再提供passphrase了。

ssh-agent的不足之处

ssh-agent确实简化了我们的工作,但是,他的缺省配置,还是给我们带来了一些不便。

在~/.bash_profile中的eval 'ssh-agent'使得每次登陆会话都会启动一个ssh-agent副本,同时每次都必须使用ssh-add向各自的ssh-agent副本中加入专用密钥。如果我只想打开系统上的一个tty,这没什么,如果我们打开了很多的终端,每次都在ssh-add的时候都需要输入密码短语,这很麻烦,同时过多的ssh-agent的副本也是一种资源浪费,虽然这没有占用太多的资源,但是显然这样做不太好,因为一个ssh-agent已经足够了。

keychain

这就引入了keychain,keychain是一个ssh-agent的前端,基于bash,解决了我们上述提到的问题,有兴趣的话,大家可以去看学习一下。

posted @ 2011-10-01 07:36  RichardHu  阅读(473)  评论(0编辑  收藏  举报