Das ist nicht nur eine Verschwendung von Ressourcen, sondern auch für den Benutzer unbequem, weil er doch wieder x-mal sein Passwort eingeben muß.
Hier kommt nun keychain ins Spiel. Dabei handelt es sich um ein Wrapper - Shellscript, dass die Umgebungsvariablen vom ssh-agent persistent speichert und so auch neuen Login-Shells zur Verfügung stellt. Nebenbei schreibt es diese Umgebungsvariablen automatisch für Bourne-Shell, C-Shell und neuerdings wohl auch für die Fishshell, so dass jede Shell sie entsprechend auswerten kann.
Wenn keychain gestartet wird, schaut es nach, ob die gespeicherten Variablen noch valide sind, falls nein startet es einen neuen ssh-agent, schreibt dessen Umgebungsvariablen in ein Shellscript und fügt einen neuen Schlüssel mit ssh-add hinzu. Man muß also nur dann die Passphrase für den Schlüssel eingeben, wenn dieser das erstemal entschlüsselt wird.
Darüber hinaus besitzt keychain noch einige weitere nützliche Parameter. Hier hilft die manpage weiter.
Um keychain automatisch beim Login zu starten, sollte man einen Aufruf in das Startscript der Shell schreiben. Für die bash könnte man z.B. das folgende in ~/.bash_profile schreiben:
# starte ssh-agent mit dem Key id_dsa
/usr/bin/keychain ~/.ssh/id_dsa
test -r $HOME/.keychain/$(hostname)-sh && source $HOME/.keychain/$(hostname)-sh
Ein Problem gibt es noch. Was passiert, wenn X11 gestartet wird? Man kann dem ssh-add über eine Umgebungsvariable noch mitteilen, welches Programm zur Abfrage der Passphrase gestartet werden soll. So hab ich z.B. in meiner .xinitrc folgendes definiert:
export SSH_ASKPASS=/usr/lib/ssh/x11-ssh-askpass
host=`hostname`
/usr/bin/keychain ~/.ssh/id_rsa ~/.ssh/id_dsa
if [ -r $HOME/.keychain/${host}-sh]; then
source $HOME/.keychain/${host}-sh
fi
Für Debian muß dafür noch das Paket ssh-askpass installiert werden und schon fragt der ssh-agent grafisch nach, was gestartet werden soll. Alternative Pakete existiern. apt-cache search ssh-askpass zeigt sie an
Mittlerweile beherrscht keychain auch den Umgang mit dem gpg-agent. Vereinfacht gesagt, ist die Funktion von gpg-agent ähnlich dem ssh-agent - es verwaltet das Passwort des geheimen gpg-Schlüssels.
Weitere Informationen zu keychain bekommt man auf der Website des Projekts. Eine genaue Vorstellung liefert eine Artikelserie auf developerworks (Teil 1, Teil 2 und Teil 3)
weitere Artikel kommen bestimmt...
