El artículo de Wikipedia probablemente tiene la mejor descripción:
La verificación al servidor se basa en la autenticación de desafío-respuesta. ssh se conecta al servidor con un nombre de usuario y la solicitud de una clave. El demonio ssh recibe la solicitud y envía un desafío basado en la clave pública almacenada en el archivo de autenticación. ssh usa la clave privada para construir una respuesta clave y la envía al sshd en espera en el otro extremo de la conexión. No envía la clave privada en sí. El daemon ssh valida la respuesta clave y, si es válida, otorga acceso al sistema. ssh-agent simplifica esto al crear un socket que escucha las conexiones SSH. El usuario simplemente inicia ssh-agent, diciéndole cómo encontrar sus claves (si no están en la ubicación predeterminada), ingresa la frase de contraseña para cada clave que se utilizará, una sola vez,
De nuevo textualmente del artículo de Wikipedia:
... ssh-agent crea un socket y luego verifica las conexiones desde ssh. Todos los que pueden conectarse a este socket también tienen acceso al agente ssh. Los permisos se establecen como en un sistema Linux o Unix habitual. Cuando se inicia el agente, crea un nuevo directorio en / tmp con permisos restrictivos. El zócalo se encuentra en la carpeta.
Por lo general, se coloca en un sistema o en los archivos rc del usuario como $HOME/.bashrc
o $HOME/.profile
(para bash shells) para que el ssh-agent
conjunto de variables de entorno se incorpore completamente a su entorno.
En mi sistema Fedora 14, se inicia bastante temprano como parte del subsistema X11. En este archivo /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
La variable $SSH_AGENT
se utiliza en otros scripts de inicio de X11 como aquí /etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
Al incorporarlo aquí, las siguientes variables de entorno se configuran como parte de un shell principal, por lo tanto, todos los hijos bifurcados también deberían tenerlas, por ejemplo:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
Hay un poco más de complejidad en esto, pero en pocas palabras esto es básicamente lo que está sucediendo ssh-agent
.
Por ejemplo, en GNOME, en ssh-agent
realidad se inicia por usuario como una aplicación de inicio:
TL; DR
En pocas palabras, ssh-agent
existe para que cuando se requieran sus claves ssh solo tenga que desbloquearlas una vez con su frase de contraseña (suponiendo que tengan una), y desde entonces estén disponibles en su forma descifrada en la memoria (RAM).