我读过官方的定义:
ssh-agent
是保存私钥的程序用于公钥身份验证(RSA、DSA、ECDSA)。这个想法是 ssh-agent 在 X 会话或登录会话以及所有其他窗口或程序开始时启动作为 ssh-agent 程序的客户端启动。通过使用环境变量,可以在使用 ssh(1) 登录其他计算机时找到代理并自动用于身份验证。
“保存私钥的程序”- 恕我直言,ssh 密钥是由用户使用ssh-keygen
命令生成的,并简单地存储在~/.ssh
- 为什么我需要一些守护进程来保存这些密钥?它到底是如何容纳它们的呢? - 它们不是只是存储在吗.ssh
?
“作为 ssh-agent 程序的客户端启动”- 我不明白。哪里需要这个?我通常只使用 ssh,如下所示:
ssh -i ~/.ssh/private_key_name username@hostname
上述定义中的“客户”到底是什么意思?什么客户?您不只是ssh
从终端运行命令来连接到另一台机器吗?还有哪些其他客户端以及为什么他们不能像命令一样使用该私钥文件的标准路径ssh
?
答案1
SSH 代理为您处理身份验证数据的签名。在向服务器进行身份验证时,您需要使用私钥对一些数据进行签名,以证明您是您。
作为一项安全措施,大多数人明智地使用密码来保护他们的私钥,因此任何身份验证尝试都需要您输入该密码。这可能是不可取的,因此 ssh-agent 会为您缓存密钥,当代理想要解密密码时,您只需要输入一次密码(通常甚至不需要,因为 ssh-agent 可以与 pam 集成,许多发行版都是这样做的)。
SSH 代理从不将这些密钥交给客户端程序,而只是提供一个套接字,客户端可以通过该套接字向其发送数据,并通过该套接字以签名数据进行响应。这样做的一个附带好处是,即使您不完全信任的程序,您也可以使用您的私钥。
SSH代理的另一个好处是可以通过SSH转发。因此,当您 ssh 到主机 A 时,在转发代理的同时,您可以从 A ssh 到另一个主机 B,而无需主机 A 上存在您的密钥(甚至不需要加密形式)。
答案2
这样做的好处ssh-agent
是您只需输入密码一次。如果您的 RSA 私钥未使用密码加密,则不需要 ssh-agent。该ssh
命令将是客户端的示例。
答案3
如果您经常ssh
访问各种不同的机器,每台机器都有自己的密钥和密码,那么运行ssh-agent
允许您在会话开始时为每个密钥输入一次密码1,然后您可以对每台机器进行多次身份验证如您所愿,无需重新输入密码。
另一个好处是,根据页面man
,代理永远不会通过其请求通道发送私钥;因此,如果您在不同的盒子之间跳转,您的私钥将受到保护。
1您可以设置life
密钥在代理中保留的时间。
答案4
“作为 ssh-agent 程序的客户端启动”是指 ssh-agent 在(本地)登录会话初始化期间启动,以便所有程序获取连接代理所需的环境$SSH_AGENT_PID
变量。$SSH_AUTH_SOCK
将私钥处理从 ssh 中剔除的另一个优点是 ssh-agent 可以替换为 gpg-agent。因此,您可以使用 OpenPGP 密钥(具有身份验证功能)进行 SSH。对于智能卡上的 OpenPGP 密钥来说,这是一个很好的解决方案。