Gentoo Linux Leitfaden zu Keychain
1.
Hintergrund
Das aktuelle Problem
Sie haben also all diese hübschen Gentoo-Maschinen, auf denen sshd läuft, es ist
jedoch etwas unbefriedigend, immer diese Login-Passwörter tippen zu müssen,
nicht wahr? Oder vielleicht haben Sie ein Skript oder einen Cron-Job, die einen
bequemen Weg suchen, eine SSH-Verbindung zu nutzen. So oder so, es gibt eine
Lösung für dieses Problem und diese beginnt mit Authentifizierung über
öffentliche Schlüssel.
Wie funktioniert Authentifizierung über öffentliche Schlüssel?
Angenommen, wir haben einen Client, der sich mit dem sshd auf einem Server
verbinden möchte. Der Client erzeugt zunächst ein Schlüssel-Paar und übergibt
den öffentliche Schlüssel an den Server. Danach sendet der Server jedes Mal,
wenn dieser Client eine Verbindung versucht, eine mit diesem öffentlichen
Schlüssel verschlüsselte Aufgabe. Nur der Besitzer des passenden privaten
Schlüssels ist in der Lage diese zu entschlüsseln, so dass, wie Sie sicher
vermutet haben, die korrekte Antwort zu einer erfolgreichen Authentifizierung
führt.
2.
Verwendung der Authentifizierung über öffentliche Schlüssel
Das Schlüssel-Paar erzeugen
Der erste Schritt ist das Erzeugen Ihres Schlüssel-Paares. Um dies zu tun,
verwenden wir den Befehl ssh-keygen wie folgt:
Befehlsauflistung 2.1: Erzeugen des Schlüssel-Paares |
$ ssh-keygen -t dsa
|
Warnung:
Stellen Sie unbedingt sicher, dass Sie eine stabile Passphrase wählen,
insbesondere, wenn dieser Schlüssel für Root-Anmeldungen verwendet wird!
|
Es sollte nun ein privater Schlüssel in ~/.ssh/id_dsa und ein
öffentlicher Schlüssel in ~/.ssh/id_dsa.pub existieren. Nun sind
wir soweit, den öffentlichen Schlüssel auf den entfernten Rechner zu kopieren.
Den Server vorbereiten
Wir werden die Datei ~/.sshid_dsa.pub auf den Server übertragen,
auf dem sshd betrieben wird. Wir werden diese Datei weiterhin zur
~/.ssh/authorized_keys Datei hinzufügen, die zu dem verbindenden
Benutzer auf diesem Server gehört. Hier ist ein Beispiel, wie dies gemacht
wird, wenn Sie bereits ssh-Zugang zum Server haben.
Befehlsauflistung 2.2: Öffentlichen Schlüssel auf den Server kopieren |
$ scp ~/.ssh/id_dsa.pub server_user@server:~/myhost.pub
$ ssh server_user@server "cat ~/myhost.pub >> ~/.ssh/authorized_keys"
$ ssh server_user@server "cat ~/.ssh/authorized_keys"
|
Die Ausgabe der letzten Zeile sollte den Inhalt der Datei
~/.ssh/authorizes_keys anzeigen. Stellen Sie sicher, dass die
Ausgabe korrekt ist.
Testen der Einrichtung
Theoretisch, wenn alles gut gegangen ist und der ssh-Daemon auf dem Server es
erlaubt, sollten wir nun in der Lage sein, einen ssh-Zugang ohne die Eingabe
eines Passworts zu erhalten. Wir müssen zwar immer noch den privaten Schlüssel
auf dem Client entschlüsseln, dies sollte jedoch nicht mit der Passphrase des
Benutzerkontos auf dem Server verwechselt werden.
Befehlsauflistung 2.3: Testen der Schlüssel |
$ ssh server_user@server
|
Hoffentlich fragt man Sie nach der Passphrase für id_dsa und Sie waren in der
Lage, ssh-Zugang als Server-Benutzer auf dem Server zu erhalten. Falls nicht,
melden Sie sich als Server-Benutzer an und prüfen Sie den Inhalt der Datei
~/.ssh/authorized_keys um sicherzustellen, dass jeder Eintrag in
einer eigenen Zeile steht. Sie möchten vielleicht auch die Konfiguration des
ssh-Daemons prüfen, um sicherzustellen, dass dieser Authentifizierung über
öffentliche Schlüssel bevorzugt, falls vorhanden.
An dieser Stelle mögen Sie vielleicht denken, "Warum das alles? Ich hab doch nur
ein Passwort durch ein anderes ersetzt?!". Entspannen Sie sich, der nächste
Abschnitt wird Ihnen genau zeigen, wie wir das alles dazu nutzen können,
wertvolle Zeit zu sparen.
3.
Authentifizierung per öffentlichen Schlüssel komfortabel machen
Typisches Schlüssel-Management mit ssh-agent
Falls Sie bis hierher gefolgt sind, denken Sie vielleicht, dass es großartig
wäre, irgendwie unsere(n) private(n) Schlüssel nur einmal entschlüsseln zu
müssen und anschließend in der Lage zu sein, ssh ohne irgendwelche Passwörter
frei benutzen könnten. Sie haben Glück, das ist genau das, wozu das Programm
ssh-agent dient.
Das Programm ssh-agent wird üblicherweise zusammen mit Ihrer X-Sitzung
oder durch ein Shell-Startup-Skript wie zum Beispiel
~/.bash_profile gestartet. Es arbeitet, indem es einen
Unix-Socket erzeugt und die entsprechenden Umgebungs-Variablen registriert, so
dass sich alle nachfolgenden Applikationen seine Dienste durch Verbinden mit
diesem Socket zu Nutze machen können. Das Programm im Eltern-Prozess Ihrer
X-Sitzung zu starten, macht eindeutig nur dann Sinn, wenn Sie den Satz der
entschlüsselten privaten Schlüssel mit allen nachfolgenden Applikationen nutzen
wollen.
Befehlsauflistung 3.1: ssh-agent vorbereiten |
$ ssh-agent
|
Notiz:
Das Programm ssh-agent bewahrt entschlüsselte Schlüssel nur solange auf, bis
es beendet wird. Falls Sie eine Lebensspanne für die Schlüssel setzen möchten,
verwenden Sie das Argument -t wie in man ssh-agent beschrieben.
|
Wenn Sie ssh-agent starten sollte es Ihnen die PID des laufenden
ssh-agent-Programms mitteilen und einige Umgebungs-Variablen setzen, als da sind
SSH_AUTH_SOCK und SSH_AGENT_PID. Es sollte weiterhin
~/.ssh/id_dsa automatisch zu seiner Sammlung hinzufügen und Sie
nach der entsprechenden Passphrase fragen. Wenn Sie weitere private Schlüssel
haben, die Sie einem laufenden ssh-agent hinzufügen möchten, können Sie den
Befehl ssh-add wie folgt verwenden:
Befehlsauflistung 3.2: Weitere Schlüssel zu ssh-agent hinzufügen |
$ ssh-add somekeyfile
|
Jetzt zur Magie. Da Ihr privater Schlüssel nun entschlüsselt vorliegt, sollten
Sie in der Lage sein, eine ssh-Verbindung zum Server aufzubauen, ohne ein
Passwort eingeben zu müssen.
Befehlsauflistung 3.3: Ssh ohne Passwörter |
$ ssh server
|
Es wäre doch schön zu wissen, wie man ssh-agent falls nötig beendet, oder?
Befehlsauflistung 3.4: ssh-agent beenden |
$ ssh-agent -k
|
Notiz:
Falls Sie Probleme hatten, ssh-agent zum Funktionieren zu bringen, könnte eine
Instanz immer noch laufen. Sie können ein Beenden wie bei jedem anderen Prozess
durch killall ssh-agent erzwingen.
|
Falls Sie noch mehr Komfort von ssh-agent möchten, machen Sie mit dem nächsten
Abschnitt über die Verwendung von keychain weiter. Falls Sie weiter machen,
stellen Sie sicher, dass der laufende ssh-agent wie im Beispiel oben beendet
wird.
Den letzten Tropfen Komfort aus ssh-agent quetschen
Keychain erlaubt es, einen ssh-agent zwischen verschiedenen Logins
wiederzuverwenden und optional jedes Mal, wenn der Benutzer sich einloggt,
nach den Passphrasen zu fragen. Bevor wir uns jedoch selbst überflügeln,
lassen Sie es uns erst einmal emergen.
Befehlsauflistung 3.5: Keychain installieren |
# emerge keychain
|
Angenommen, das war erfolgreich, dann können wir nun keychain ungehindert
verwenden. Fügen Sie Folgendes zu Ihrer ~/.bash_profile hinzu, um
keychain zu aktivieren:
Befehlsauflistung 3.6: keychain in .bash_profile aktivieren |
keychain ~/.ssh/id_dsa
. ~/.keychain/$HOSTNAME-sh
|
Notiz:
Sie können wie Sie möchten weitere private Schlüssel zu dieser Befehlszeile
hinzufügen. Weiterhin können Sie die Option --clear hinzufügen, wenn Sie bei
jeder Erzeugung einer neuen Shell nach Passphrasen gefragt werden möchten.
|
Notiz:
Falls Sie nicht bash verwenden, schauen Sie sich die Beispiele für die
Verwendung mit anderen Shells im Abschnitt EXAMPLES von man
keychain an. Die Idee ist, diese Kommandos jedes Mal, wenn Sie eine Shell
verwenden, auszuführen.
|
Lassen Sie es uns testen. Zunächst stellen wir sicher, dass wir den ssh-agent
aus dem vorigen Abschnitt beendet haben, anschließend starten wir eine Shell,
meistens durch schlichtes Einloggen oder Starten eines neuen Terminals. Es
sollte nach dem Passwort für jeden Schlüssel, den Sie angegeben haben, gefragt
werden. Alle Shells, die danach geöffnet werden, sollten den ssh-agent
wiederverwenden, wodurch Sie immer wieder ssh-Verbindungen ohne Passwort
aufbauen können.
Keychain mit KDE verwenden
Wenn Sie ein KDE-Benutzer sind, können Sie, anstatt
~/.bash_profile zu verwenden, KDE den ssh-agent für Sie managen
lassen. Damit dies funktioniert müssen Sie
/usr/kde/${KDE_VERSION}/env/agent-startup.sh, was beim Starten von
KDE gelesen wird, und
/usr/kde/${KDE_VERSION}/shutdown/agent-shutdown.sh, was beim
Beenden von KDE ausgeführt wird, editieren. ${KDE_VERSION} entspricht dabei
den ersten beiden Komponenten der Version Ihrer KDE-Installation. Wenn Sie z.B.
KDE 3.5.1 verwenden, könnten Sie die Dateien wie folgt ändern:
Befehlsauflistung 3.7: Editieren von /usr/kde/3.5/env/agent-startup.sh |
if [ -x /usr/bin/ssh-agent ]; then
eval "$(/usr/bin/ssh-agent -s)"
fi
|
Befehlsauflistung 3.8: Editieren von /usr/kde/3.5/shutdown/agent-shutdown.sh |
if [ -n "${SSH_AGENT_PID}" ]; then
eval "$(ssh-agent -k)"
fi
|
Alles was Sie nun tun müssen ist ein Terminal Ihrer Wahl, wie Konsole, zu
starten und die Schlüssel zu laden, die Sie verwenden möchten. Zum Beispiel:
Befehlsauflistung 3.9: Laden des SSH-Schlüssels |
keychain ~/.ssh/id_dsa
|
An Ihre Schlüssel wird sich so lange erinnert, bis Sie Ihre KDE-Sitzung beenden
oder ssh-agent manuell killen.
4.
Abschließende Bemerkungen
Sicherheitserwägungen
Sicherlich fügt die Verwendung von ssh-agent Ihrem System etwas Unsicherheit
zu. Würde ein anderer Benutzer Ihre Shell verwenden während Sie auf der
Toilette sind, könnte er sich auf allen Ihren Servern ohne Passwort anmelden.
Demzufolge ist es ein Risiko für die Server, mit denen Sie sich verbinden und
Sie sollten sicherlich in den geltenden Sicherheitsbestimmungen nachschlagen.
Wenn Sie ssh-agent verwenden, treffen Sie angemessene Maßnahmen, um die
Sicherheit Ihrer Sitzungen zu gewährleisten.
Fehlerbehebung
Das Meiste hier sollte ziemlich gut laufen, aber wenn Sie auf Probleme stoßen,
möchten Sie sicher einige nützliche Dinge wissen.
-
Falls es nicht möglich ist, sich ohne ssh-agent zu verbinden, ziehen Sie die
Verwendung von ssh mit den Argumenten -vvv in Erwägung, um herauszufinden
was passiert. Manchmal ist der Server nicht entsprechen konfiguriert, um
Authentifizierung über öffentliche Schlüssel zu verwenden, manchmal sind
Server so konfiguriert, dass Sie immer nach einem lokalen Passwort
fragen. In diesem Fall sollten Sie auch die Option -o mit ssh verwenden oder
die sshd_config des Servers ändern.
-
Falls Sie Probleme mit ssh-agent oder keychain haben, verwenden Sie
möglicherweise eine Shell, die die von ihnen verwendeten Befehle nicht
versteht. Schlagen Sie in den Man-Pages von ssh-agent und keychain die
Details über die Verwendung anderer Shells nach.
Die Inhalte dieses Dokuments sind unter der Creative Commons -
Namensnennung / Weitergabe Lizenz lizenziert.
|