Wikipedia-Artikel hat wahrscheinlich die beste Beschreibung:
Die Überprüfung des Servers basiert auf der Challenge-Response-Authentifizierung. ssh verbindet sich mit dem Server mit einem Benutzernamen und der Anforderung eines Schlüssels. Der ssh-Daemon erhält die Anforderung und sendet eine Abfrage basierend auf dem in der Authentifizierungsdatei gespeicherten öffentlichen Schlüssel zurück. ssh verwendet den privaten Schlüssel, um eine Schlüsselantwort zu erstellen, und sendet sie an den wartenden sshd am anderen Ende der Verbindung. Der private Schlüssel selbst wird nicht gesendet. Der ssh-Daemon validiert die Schlüsselantwort und gewährt, falls gültig, Zugriff auf das System. ssh-agent vereinfacht dies, indem ein Socket erstellt wird, der auf SSH-Verbindungen wartet. Der Benutzer startet einfach ssh-agent und teilt ihm mit, wie er seine Schlüssel findet (wenn sie sich nicht am Standardspeicherort befinden). Er gibt die Passphrase für jeden zu verwendenden Schlüssel einmalig ein.
Nochmals wörtlich aus dem Wikipedia-Artikel:
... ssh-agent erstellt einen Socket und überprüft dann die Verbindungen von ssh. Jeder, der sich mit diesem Socket verbinden kann, hat auch Zugriff auf den ssh-agent. Die Berechtigungen werden wie in einem normalen Linux- oder Unix-System festgelegt. Wenn der Agent gestartet wird, erstellt er ein neues Verzeichnis in / tmp mit eingeschränkten Berechtigungen. Der Socket befindet sich im Ordner.
Es wird normalerweise entweder in die rc-Dateien eines Systems oder eines Benutzers wie $HOME/.bashrc
oder $HOME/.profile
(für Bash-Shells) eingefügt, damit die ssh-agent
festgelegten Umgebungsvariablen vollständig in Ihre Umgebung integriert werden.
Auf meinem Fedora 14-System wird es als Teil des X11-Subsystems ziemlich früh gestartet. In dieser Datei /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
Die Variable $SSH_AGENT
wird dann in anderen X11-Startskripten verwendet, z. B . /etc/X11/xinit/Xclients
:
exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"
Durch das Einfügen in diese Datei werden die folgenden Umgebungsvariablen als Teil einer übergeordneten Shell festgelegt. Daher sollten alle verzweigten Kinder diese auch haben, zum Beispiel:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;
Das ist etwas komplexer, aber auf den Punkt gebracht, ist dies im Grunde das, was los ist ssh-agent
.
Beispielsweise wird in GNOME ssh-agent
tatsächlich pro Benutzer als Startanwendung gestartet:
TL; DR
Unterm Strich ssh-agent
müssen Sie Ihre SSH-Schlüssel nur einmal mit ihrer Passphrase entsperren (vorausgesetzt, sie verfügen über eine Passphrase), und von da an sind sie in ihrer entschlüsselten Form im Arbeitsspeicher (RAM) verfügbar.