SSH Schlüssel mit ssh-agent verwalten
Mit Hilfe eines Public Keys kann man sich ohne eine Passworteingabe an einem Rechner anmelden. Trotzdem sollte der Schlüssel selbst mit einem Passwort versehen werden, so dass bei jeder SSH Verbindung ein Passwort eingegeben werden muss. Mit Hilfe von ssh-agent kann der Schlüssel gespeichert werden, so dass das Passwort nur einmal eingegeben werden muss. Dazu muss zuerst eine Shell mit ssh-agent gestartet werden, in welcher die Schlüssel ohne Passwort verwendet werden können:
# ssh-agent tcsh
Danach können die Schlüssel mit Hilfe von ssh-add hinzugefügt werden. ssh-add sucht dabei nach vorhandenen Schlüsseln und fragt nach den Schlüsselpasswort:
# ssh-add Enter passphrase for /home/beat/.ssh/id_rsa: Identity added: /home/beat/.ssh/id_rsa (/home/beat/.ssh/id_rsa)
Nun kann man sich ohne weitere Passworteingabe an einem Rechner anmelden:
# ssh <Benutzer>@<Rechner>
Mit Hilfe der -l Option können alle gespeicherten Schlüssel angezeigt werden:
# ssh-add -l 2048 4d:3a:53:64:46:69:51:61:4b:62:93:66:77:ff:42:88 /home/beat/.ssh/id_rsa (RSA)
Ruft man ssh-add mit der -x Option auf, wird man nach einem Passwort gefragt und der ssh-agent wird gesperrt:
# ssh-add -x Enter lock password: Again: Agent locked.
Ist der Agent gesperrt und man versucht sich wieder mit SSH zu verbinden, wird man wieder nach dem Passwort gefragt:
# ssh <Benutzer>@<Rechner> Enter passphrase for key '/home/beat/.ssh/id_rsa':
Mit Hilfe der -X Option kann der Agent wieder entsperrt werden:
# ssh-add -X Enter lock password: Agent unlocked.
Verwendet man den Schlüssel nicht mehr, so kann der ssh-agent mit Hilfe der -k Option beendet werden:
# ssh-agent -k unsetenv SSH_AUTH_SOCK; unsetenv SSH_AGENT_PID; echo Agent pid 7747 killed;
Sowohl auf FreeBSD als auch auf OpenBSD ist ssh-agent und ssh-add im Basissystem vorhanden. Mehr Informationen findet man in den Manpages ssh-agent(1) und ssh-add(1).
Comments
"ssh-agent tcsh" funktioniert zwar auch, aber noch einfacher ist es, den Befehl in die .xinitrc zu schreiben. z.b.
ssh-agent startfluxbox.
Oder wenn man ihn aus ner Shell heraus startet:
eval `ssh-agent`
Damit werden automatisch die nötigen Umgebungsvariablen gesetzt, um den Agent zu benutzen.
Danke für den (mal wieder) guten Blog-Beitrag! :)
Ich benutze kdm und logge mich mit meinem ssh key ein. Dazu sieht meine /etc/pam.d/kde so aus:
auth sufficient pam_ssh.so no_warn try_first_pass
auth required pam_unix.so no_warn try_first_pass
# account
account required pam_nologin.so
account required pam_unix.so
# session
session optional pam_ssh.so
session required pam_permit.so