Saturday, January 20, 2007

ssh-agent 简介

ssh-agent 是一个保管私钥的程序。然后的故事呢是这样的,ssh-agent 在一个 X-session 或者一个 login session 的一开始启动,所有其他窗口以及程序都会作为 ssh-agent 的客户端启动。
以上译自 ssh-agent 的在线手册(man)。

按我的理解来说,ssh-agent 就是一个管理私钥的代理,受管理的私钥通过 ssh-add 来添加,所有 ssh-agent 的客户端都可以共享使用这些私钥。

用处一,不用重复输入密码。

用 ssh-add 添加私钥时,如果私钥有密码的话,照例会被要求输入一次密码,在这之后 ssh-agent 可直接使用该私钥,无需再次密码认证。

用处二,不用到处部署私钥。

假设我有私钥分别可以登录同一内网的主机 A 和主机 B,出于一些原因,不能直接登录 B。我可以通过在 A 上部署私钥或者设置 PortForwarding 来登录 B,也可以转发认证代理连接在 A 上面使用 ssh-agent 管理的私钥登录 B。

以 cygwin 环境为例,描述一下操作流程

islue@localhost $ ssh-agent bash --login -i

通过 ssh-agent 启动 bash,或者说把 bash 挂到 ssh-agent 下面

islue@localhost $ ssh-add

添加私钥,如果跳过第一步直接添加私钥,也就是说当前的 shell 并没有挂在 ssh-agent 下面,则会收到这样的错误信息

Could not open a connection to your authentication agent.

接下来登录主机 A

islue@localhost $ ssh -A HOST_A

-A 的作用就是启用转发认证代理连接

islue@HOST_A $ ssh HOST_B
islue@HOST_B $

从主机 A 上顺利登录主机 B,完毕。

更多内容请参阅 ssh 和 ssh-agent 的在线手册。

1 comment:

lonereed said...

linux 下倒不经常用 ssh-agent, 俺常用 putty 的 Pageant