L'article Wikipedia a probablement la meilleure description:
La vérification sur le serveur est basée sur l'authentification challenge-response. SSH se connecte au serveur avec un nom d'utilisateur et la demande d'une clé. Le démon ssh obtient la demande et renvoie un défi en fonction de la clé publique stockée dans le fichier d'authentification. ssh utilise la clé privée pour construire une réponse de clé et l'envoie au sshd en attente à l'autre bout de la connexion. Il n'envoie pas la clé privée elle-même. Le démon ssh valide la réponse à la clé et, s’il est valide, accorde l’accès au système. ssh-agent simplifie cela en créant un socket qui écoute les connexions SSH. L'utilisateur démarre simplement ssh-agent en lui indiquant comment trouver leurs clés (s'ils ne se trouvent pas à l'emplacement par défaut), saisit la phrase secrète de chaque clé à utiliser, une fois pour toutes,
Encore une fois, extrait de l'article de Wikipédia:
... ssh-agent crée un socket, puis vérifie les connexions depuis ssh. Tous ceux qui peuvent se connecter à ce socket ont également accès à ssh-agent. Les autorisations sont définies comme dans un système Linux ou Unix habituel. Lorsque l'agent démarre, il crée un nouveau répertoire dans / tmp avec des autorisations restrictives. Le socket est situé dans le dossier.
Il est généralement placé dans les fichiers rc du système ou de l'utilisateur, tels que $HOME/.bashrc
ou $HOME/.profile
(pour les shells bash), de sorte que l' ssh-agent
ensemble des variables d' environnement soit complètement intégré à votre environnement.
Sur mon système Fedora 14, il démarre assez tôt dans le sous-système X11. Dans ce fichier /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
est ensuite utilisée dans d'autres scripts de démarrage X11 tels que ceux-ci /etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
En l'intégrant ici, les variables d'environnement suivantes sont définies dans le cadre d'un shell parent. Par conséquent, tous les enfants forkés doivent également en disposer, par exemple:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
Ceci est un peu plus complexe, mais en un mot c'est ce qui se passe ssh-agent
.
Par exemple, dans GNOME, ssh-agent
est lancé par utilisateur en tant qu’application de démarrage:
TL; DR
En bout de ligne, ssh-agent
existe, de sorte que lorsque vos clés ssh sont requises, vous ne devez les déverrouiller qu’une fois avec leur phrase secrète (en supposant qu’elles en aient une), puis elles sont disponibles sous leur forme déchiffrée en mémoire (RAM).