维基百科文章可能是最好的描述:
对服务器的验证基于质询-响应身份验证。ssh使用用户名和密钥请求连接到服务器。ssh守护程序获取请求,并根据存储在身份验证文件中的公钥发送质询。ssh使用私钥构造密钥响应,并将其发送到连接另一端的等待sshd。它不发送私钥本身。ssh守护程序验证密钥响应,如果有效,则授予对系统的访问权限。ssh-agent通过创建一个侦听SSH连接的套接字来简化此操作。用户只需启动ssh-agent,告诉它如何查找其密钥(如果它们不在默认位置),一次输入要使用的每个密钥的密码,
维基百科文章再次逐字记录:
... ssh-agent创建一个套接字,然后检查来自ssh的连接。每个能够连接到此套接字的人都可以访问ssh-agent。权限的设置与通常的Linux或Unix系统相同。代理启动时,它将在/ tmp中创建具有限制性权限的新目录。套接字位于文件夹中。
通常将其放在系统或用户的rc文件中,例如$HOME/.bashrc
或$HOME/.profile
(对于bash shell),以便将环境变量ssh-agent
集完全合并到您的环境中。
在我的Fedora 14系统上,它作为X11子系统的一部分很早就启动了。在此文件中,/etc/X11/xinit/xinitrc-common
:
# Prefix launch of session with ssh-agent if available and not already running.
SSH_AGENT=
if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then
if [ "x$TMPDIR" != "x" ]; then
SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
else
SSH_AGENT="/usr/bin/ssh-agent"
fi
fi
$SSH_AGENT
然后在其他X11启动脚本中使用该变量,例如/etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
通过将其合并到此处,以下环境变量将被设置为父shell的一部分,因此所有派生的子代也应具有它们,例如:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
稍微复杂一点,但总的来说,这就是要进行的工作ssh-agent
。
例如,在GNOME中,ssh-agent
实际上是作为启动应用程序按用户启动的:
TL; DR
底线是ssh-agent
存在的,因此,当需要ssh密钥时,您只需使用其口令短语一次解锁(假设它们具有一个)即可,然后从那时起,它们就可以以已解密的形式在内存(RAM)中使用。