Gentoo Logo

Gentoo Linux Leitfaden zu Keychain

Inhalt:

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
(Übernehmen Sie einfach die Voreinstellungen und stellen Sie sicher,
dass Sie eine stabile Passphrase eingeben)

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
. ~/.keychain/$HOSTNAME-sh-gpg

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 /etc/kde/agent-startup.sh, was beim Starten von KDE gelesen wird, und /etc/kde/shutdown/agent-shutdown.sh, was beim Beenden von KDE ausgeführt wird, editieren. Sie könnten die Dateien wie folgt ändern:

Befehlsauflistung 3.7: Editieren von /etc/kde/agent-startup.sh

if [ -x /usr/bin/ssh-agent ]; then
  eval "$(/usr/bin/ssh-agent -s)"
fi

Befehlsauflistung 3.8: Editieren von /etc/kde/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
(Enter your key password)

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.


Drucken

Seite aktualisiert 21. April 2010

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: Dieses Dokument beschreibt die Verwendung von gemeinsamen SSH-Schlüsseln in Verbindung mit dem keychain-Programm. Es setzt elementare Kenntnisse über Public-Key-Kryptografie voraus.

Eric Brown
Autor

Marcelo Góes
Bearbeiter

Joshua Saddler
Bearbeiter

Thomas Gier
Übersetzer

Jan Hendrik Grahl
Übersetzer

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.