Die Verwendung eines SSH-Agenten macht es überflüssig, dass bei jedem Aufruf des Programms ssh
die (üblicherweise lange und komplexe) Passphrase eingetippt werden muss.
In einem Initialisierungsvorlauf für SSH wurden die Schlüsselpaare erzeugt, in den lokalen Dateien abgelegt und die öffentlichen Schlüssel an die Kommunikationspartner verteilt. Zu Beginn einer interaktiven Session bzw. am Anfang eines Scripts wird der SSH-Agent mittels eines Aufrufs des Kommandos ssh-agent
(siehe http://www.openssh.com) gestartet. Dann werden ihm die notwendigen privaten Schlüssel mittels ssh-add
übergeben. Der SSH-Agent führt diese privaten Schlüssel im Speicher in entschlüsselter Form. Für diesen Entschlüsselungsprozess benötigt er die Passphrasen, falls welche spezifiziert wurden.
Von nun an bis zu seiner Beendigung kontaktieren SSH-Clients den SSH-Agenten automatisch für alle Schlüssel-bezogenen Operationen. Wenn mittels eines ssh
-Aufrufs eine remote Verbindung eingerichtet werden soll, führen der lokale SSH-Agent und der remote sshd-Dämon automatisch die erforderliche Authentifizierungsprozedur durch.
Wenn eine Passphrase verwendet wird, muss sie nur einmal eingegeben werden. Sie wird von ssh-add
vom aktuellen Terminal gelesen, falls ssh-add
vom Terminal gestartet wurde. Wenn ssh-add
kein ihm zugeordnetes Terminal besitzt, aber die Variablen DISPLAY
und SSH_ASKPASS
gesetzt sind, wird das durch SSH_ASKPASS
spezifizierte Programm ausgeführt und ein X11-Window zum Lesen der Passphrase geöffnet. Dies ist nützlich wenn ssh-add
in einer .Xsession oder in einem Startup-Script aufgerufen wird.
Beispiel
ssh-keygen -b 1024 -t rsa -C <comment> -N "<passphrase>" # Erzeugt einen 1024 bit RSA key in SSH Version 2 geschützt durch eine Passphrase ssh-agent /bin/csh # Als Argument kann der Pfad auf eine Shell oder ein Shell Script angegeben werden ssh-add # Lädt standardmäßig alle Schlüssel der Identity-Datei
Es müssen die Umgebungsvariablen, die auf den Socket des SSH-Agenten zeigen, gesetzt werden, damit der SSH-Client mit dem Agenten kommunizieren kann. Das Programm ssh-agent
liefert hierfür bei seiner Rückkehr die notwendige Information:
Beispiel
# In SSH Version 2 Notation: SSH2_AUTH_SOCK=/tmp/ssh-JGK12327/agent.12327; export SSH2_AUTH_SOCK; SSH2_AGENT_PID=12328; export SSH2_AGENT_PID;
Diese Output-Kommandos des Programms ssh-agent
können mittels des eval
-Kommandos ausgeführt werden. Beachten Sie dabei die rückläufigen Anführungszeichen (`):
eval `ssh-agent ...`
Das eval
-Kommando weist die Shell an, das Kommando ssh-agent
ablaufen zu lassen und anschließend die von ihm generierten Kommandos auszuführen. Danach stehen die Shell Variablen SSH_AUTH_SOCK
und SSH_AGENT_PID
zur Verfügung. Nach Ausführung des Kommandos eval `ssh-agent`
wird die PID des SSH-Agenten ausgegeben.
Das Kommando eval `ssh-agent`
sollte in die Datei ~/.bash_profile aufgenommen werden.
Shell Scripts
Wenn SSH Shell Scripts genutzt werden sollen, kann die Installation des SSH-Agenten, das Setzen der korrekten Umgebung, und die Versorgung des Agenten mit den notwendigen Schlüsseln und Passphrasen in einer Initialisierungsphase oder in einem Startup-Script gemacht werden, bevor das Script mit den ssh
-Aufrufen gestartet wird.
Zusätzlich muss das SSH-Script instrumentiert werden, um diese Werte in den Umgebungsvariablen zu setzen. Dazu muss der Output des Programms ssh-agent
in einer Hilfsdatei abgespeichert worden sein, die dann im Script mittels des „Punkt“-Kommandos ausgeführt wird.
Beispiel
ssh-agent|head -2 > <auxfile> # Speichere Umgebung in Initialisierungsphase : : : . <auxfile> # Setze Umgebung im Script