Public-Key-Authentifizierung für SSH unter Unix

Wer sich oft via SSH (mit langen oder komplizierten Passwörtern) auf einem entfernten Rechner einloggt, weiß, wie nervig und zeitfressend dies mit der Zeit werden kann. Abhilfe schafft die Public-Key-Authentifizierung, eine Authentifizierungsmethode, die verwendet wird, um Benutzer mit Hilfe eines Schlüsselpaars (bestehend aus privatem und öffentlichem Schlüssel) an einem entfernten Rechner anzumelden. Der öffentliche Schlüssel kann hier zur automatischen Anmeldung genutzt werden, wodurch der interaktive Dialog zur Kennworteingabe entfällt. Netter Nebeneffekt: Ein solches Schlüsselpaar ist wesentlich schwerer zu überwinden als ein Kennwort, da die Berechnung des privaten Schlüssels aus dem öffentlichen je nach Wahl der Länge des Schlüssels sehr aufwändig bis praktisch unmöglich ist.

Um die Public-Key-Authentifizierung für SSH unter Unix zu nutzen, müssen Sie zunächst auf Ihrem lokalen Rechner das Schlüsselpaar erzeugen. Verwenden können Sie hierfür entweder DSA (Digital Signature Algorithm) oder RSA (benannt nach den Erfindern Rivest, Shamir und Adleman). Es scheiden sich die Geister, ob die Verwendung DSA oder RSA sinnvoller ist – der ssh-keygen-Befehl verwendet RSA als Standard.

Bevor Sie Ihr Schlüsselpaar erstellen, müssen Sie in den .ssh-Ordner Ihres Home-Ordners wechseln. Führen Sie hierfür einfach folgenden Befehl im Terminal aus.

cd ~/.ssh/

Um das (RSA-)Schlüsselpaar zu erzeugen, führen Sie folgenden Befehl im Terminal aus.

ssh-keygen

Um hingegen ein DSA-Schlüsselpaar zu erzeugen, führen Sie folgenden Befehl im Terminal aus.

ssh-keygen -t dsa

Sie werden anschließend nach dem gewünschten Namen der Datei (Standard: id_rsa) gefragt – falls Sie verschiedene Schlüsselpaare für verschiedene entfernte Rechner verwenden möchten, ist es hier sinnvoll, entsprechende Bezeichnungen zu verwenden (bspw. server1_rsa, server2_rsa, ...). Weiters haben Sie die Möglichkeit, optional einen Passphrase – also ein Passwort – für Ihr Schlüsselpaar anzugeben. Anschließend wird Ihr Private-Key (id_rsa) und Public-Key (id_rsa.pub) im .ssh-Ordner Ihres Home-Ordners erstellt.

Anschließend müssen Sie Ihren Public-Key via SFTP auf Ihren entfernten Rechner laden, da dieser dort eingetragen werden muss. Nachdem Sie den Public-Key bspw. in den Home-Ordner des root-Users kopiert haben, müssen Sie den Public-Key zur Liste der berechtigten Keys hinzufügen – führen Sie hierzu folgenden Befehl im Terminal des entfernten Rechners aus.

cat ~/id_dsa.pub >> ~/.ssh/authorized_keys

Anschließend können Sie den Public-Key optional aus Ihrem Home-Ordner löschen.

rm ~/id_dsa.pub

Sollten Sie Ihren Public-Key ohne SFTP-Programm auf Ihren entfernten Rechner kopieren wollen, können Sie obige Schritte mit folgendem Befehl kombinieren und Ihren Public-Key auf den entfernten Rechner übergeben und ihn dort den berechtigten Keys hinzufügen.

cat ~/.ssh/id_rsa.pub | ssh remoteuser@remotehost "cat >> ~/.ssh/authorized_keys"

Wird ~ für das Home-Verzeichnis nicht unterstützt (etwa auf SunOS, Fehlermeldung "~: does not exist"), so müssen Sie sich in Ihrem Home-Verzeichnis befinden und anschließend den folgenden Befehl ausführen.

cat .ssh/id_rsa.pub | ssh remoteuser@remotehost "cat >> .ssh/authorized_keys"

Selbstverständlich können Sie – falls gewünscht – Ihren Public-Key auch via SCP auf den entfernten Rechner kopieren und ihn wie oben beschrieben zur Liste der berechtigten Keys hinzufügen.

scp ~/.ssh/id_rsa.pub remoteuser@remotehost:~/.ssh/

Sollte der .ssh-Ordner in Ihrem Home-Ordners (noch) nicht existieren, können Sie diesen ganz einfach erstellen.

mkdir ~/.ssh
chmod 700 ~/.ssh

Bitte beachten Sie zudem, dass Sie den Public-Key immer der Liste der berechtigten Keys des Benutzers hinzufügen müssen, mit dem Sie sich später via SSH einloggen möchten. Sollten Sie also das Login als root nicht erlauben und sich bspw. über den Benutzer remoteuser anmelden, müssen Sie den Public-Key in dessen Liste der berechtigten Keys (/home/remoteuser/.ssh/authorized_keys) hinzufügen.

Nachdem Sie den Public-Key den berechtigten Keys hinzugefügt haben, müssen Sie in Ihrer SSH-Daemon-Konfiguration noch das Login via Keys aktivieren. Öffnen Sie hierfür /etc/ssh/sshd_config mit Ihrem gewünschten Editor (bspw. nano) und passen Sie folgende Parameter an.

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys


In diesem Zug macht es Sinn, die Anmeldung über ein Passwort vollständig zu deaktivieren, um voll und ganz auf die Public-Key-Authentifizierung zu setzen. Hierfür passen Sie den folgende Parameter an.

PasswordAuthentication no

Damit diese Änderungen wirksam werden, müssen Sie den SSH-Daemon neustarten.

/etc/init.d/ssh restart

Die aktuelle SSH-Sitzung wird dadurch allerdings nicht beendet. Um Konfigurationsfehler zu beheben sollten Sie die aktuelle Sitzung offen halten, bis alles richtig funktioniert. Nun sollte es möglich sein, sich an Ihrem lokalen Computer mit Ihrem Private-Key anzumelden.

ssh remoteuser@remotehost

Den dazugehörigen Private-Key findet das Terminal oder SFTP-Programme wie CyberDuck oder FileZilla in der Regel von selbst, optional können Sie den gewünschten Key auch über den Parameter -i angeben.

ssh remoteuser@remotehost -i "~/.ssh/id_rsa"

Kommentare



Bitte tippen Sie die 6 Zeichen links ab
Anmelden
»Das Wissen ist Kind der Erfahrung.«
— Leonardo da Vinci