SSH Public Key Authentifizierung


Einleitung

Dieser Text beschreibt kurz, wie Sie auf Linux Systemen eine public key basierende Validierung implementieren können.

Es besteht oft die Notwendigkeit, die Funktionalität von rcp oder rsh zu ersetzen, da diese als unsicher einzustufen sind. Babei ist es - etwa zur Automatisierung von Aufgaben - notwendig, dass dies ohne Eingabe des Passwortes erfolgt (auch wenn dies unsicher ist).

Mit der public key Authentifizierung ist dies möglich. Dieser Text beschreibt diese kurz.

Umfangreichere Anleitungten finden Sie in der allgemeinen SSH Dokumentation des ZID: http://unix-docu.uibk.ac.at/zid/software/unix/ssh/.

Speziell im Text SSH für UNIX konfigurieren und benutzen finden Sie weitere, umfangreiche Informationen zum Thema.

Server Konfiguration

In der Serverkonfiguration ist die public key basierende Validierung zu aktivieren.

Für einen OpenSSH Server tragen Sie dazu in der Datei /etc/ssh/sshd_config ein:

PubkeyAuthentication yes

Bei SSH.com Servern muss dies der Option AllowedAuthentications der Konfigurationsdatei /etc/ssh2/sshd2_config hinzugefügt werden, zum Beispiel:

AllowedAuthentications          hostbased,publickey,password

Erstellen eines Schlüssels

Bei der public key Methode erstellt der Benutzer ein Schlüsselpaar. Der Klient ist im Besitz des privaten Schlüssels, der öffentliche Schlüssel wird am Server abgelegt. Passen öffentlicher und privater Schlüssel zusammen, so wird damit der Benutzer (gegebenenfalls nach Eingabe des Passwortes des Schlüssels) validiert. Ist für den Schlüssel kein Passwort festgelegt, erfolgt damit die Anmeldung ohne Eingabe eines Passwortes.

Anmerkung

Soll der public key für eine automatische Anmeldung verwendet werden, ist im Folgenden ein leeres Passwort zu wählen.

Beachten Sie, dass dies ein Sicherheitsproblem darstellt und die Zugangssicherheit von ssh auf jene von rsh und ähnlichen Protokollen senkt!

OpenSSH Klient

Geben Sie als der Benutzer, unter dem die Verbindung aufgebaut werden soll, folgenden Befehl ein:

ssh-keygen -t dsa

Bestätigen Sie bei der Frage der zu erstellenden Datei den vorgeschlagenen Namen. Geben Sie gegebenenfalls ein Kennwort ein.

Folgende Dateien werden erstellt:

  • ~/.ssh/id_dsa

    Das ist Ihr privater Schlüssel. Machen Sie diesen auf keinen Fall anderen zugänglich!

  • ~/.ssh/id_dsa.pub

    Das ist Ihr öffentlicher Schlüssel, den Sie später auf den/die Server übertragen.

SSH.com Klient

Sofern nicht anders angegeben gilt das zuvor für den OpenSSH Klienten Gesagte.

Zum Erstellen des Schlüssels geben Sie folgenden Befehl ein:

ssh-keygen2 -t dsa

Es werden folgende Dateien erzeugt:

  • ~/.ssh2/id_dsa_2048_a

    privater Schlüssel

  • ~/.ssh2/id_dsa_2048_a.pub

    öffentlicher Schlüssel

Nun müssen Sie noch den Dateinamen des soeben erstellten privaten Schlüssels in die Datei ~/.ssh2/identification eintragen. Fügen Sie dazu folgende Zeile in diese Datei ein:

idkey id_dsa_2048_a

Einbringen des Schlüssels am Server

Nun müssen Sie den öffentlichen Schlüssel des Klienten auf den Server in das Verzeichnis jenes Benutzers kopieren, als der Sie sich mittels public key Authentifizierung anmelden wollen.

OpenSSH Server

OpenSSH Klient

Um sich von einem OpenSSH Klienten auf einen OpenSSH Server zu verbinden, fügen Sie am Server der Datei ~/.ssh/authorized_keys den Inhalt der Datei ~/.ssh/id_dsa.pub des Klienten hinzu.

Ein Beispiel, wie dies gemacht werden kann (aus der Sicht des Klienten):

rsync -v -e ssh --archive ~/.ssh/id_dsa.pub [server]:new_key.pub
ssh [server] "test -d .ssh || mkdir .ssh && chmod 700 .ssh"
ssh [server] "cat new_key.pub >> .ssh/authorized_keys"
ssh [server] rm new_key.pub

SSH.com Klient

Um sich von einem SSH.com Klienten auf einen OpenSSH Server zu verbinden, kopieren Sie die Datei ~/.ssh2/id_dsa_2048_a.pub auf den Server. Dort wandeln Sie es mit folgendem Befehl in das OpenSSH Format um:

ssh-keygen -f [ssh.com.file] > [new_file]

Dann fügen Sie diese neue Datei (beziehungsweise die Ausgabe des Befehls) der Datei ~/.ssh/authorized_keys hinzu.

Ein Beispiel, wie dies gemacht werden kann (aus der Sicht des Klienten):

rsync -v -e ssh --archive ~/.ssh2/id_dsa_2048_a.pub [server]:new_key.pub
ssh [server] "test -d .ssh || mkdir .ssh && chmod 700 .ssh"
ssh [server] ssh-keygen -i -f new_key.pub >> .ssh/authorized_keys
ssh [server] rm new_key.pub

SSH.com Server

SSH.com Klient

Um sich von einem SSH.com Klienten auf einen SSH.com Server zu verbinden, kopieren Sie die Datei ~/.ssh2/id_dsa_2048_a.pub in das Verzeichnis ~/.ssh2/ des Servers und geben ihr dort einen sprechenden Namen. Fügen Sie dann am Server der Datei ~/.ssh2/authorization einen Eintrag hinzu, der die Verwendung dieses Schlüssels erlaubt, z.B.:

Key my_key.pub

Ein Beispiel, wie das gemacht werden kann (aus der Sicht des Klienten):

ssh [server] "test -d .ssh2 || mkdir .ssh2 && chmod 700 .ssh2"
rsync -v -e ssh --archive ~/.ssh2/id_dsa_2048_a.pub \
      [server]:.ssh2/[client]_[user].pub
ssh [server] echo Key [client]_[user].pub >> .ssh2/authorization

OpenSSH Klient

Um sich von einem OpenSSH Klienten auf einen SSH.com Server zu verbinden, wandeln Sie am Klienten den öffentlichen Schlüssel in das SSH.com Format um:

ssh-keygen -t dsa -e -f ~/.ssh/id_dsa.pub > ~/ssh_key.pub

Diese Datei kopieren Sie in das Verzeichnis ~/.ssh2/ des Servers und geben ihr dort einen sprechenden Namen. Fügen Sie dann am Server der Datei ~/.ssh2/authorization einen Eintrag hinzu, der die Verwendung dieses Schlüssels erlaubt, z.B.:

Key my_key.pub

Ein Beispiel, wie das gemacht werden kann (aus der Sicht des Klienten):

ssh-keygen -t dsa -e -f ~/.ssh/id_dsa.pub > ~/ssh_key.pub
ssh [server] "test -d .ssh2 || mkdir .ssh2 && chmod 700 .ssh2"
rsync -v -e ssh --archive ~/ssh_key.pub [server]:.ssh2/[client]_[user].pub
ssh [server] echo Key [client]_[user].pub >> .ssh2/authorization
rm ~/ssh_key.pub

finally()

Beachten Sie, dass die Verwendung von scp von einem OpenSSH Klienten auf einen SSH.com Server nicht funktioniert, da die scp Variante von OpenSSH noch SSH Version 1 verwendet. Wir empfehlen, stattdessen rsync zu verwenden. Die Verwendung wurde oben bereits kurz vorgeführt. Details finden Sie in den Hilfeseiten. rsync ist auch schneller als scp, da hier nur die Validierung über SSH abgewickelt wird, die Daten selbst werden unverschlüsselt übertragen.

Beachten Sie, dass die public key Authentifizierung nicht auf Servern funktioniert, auf denen Benutzer Ihre HOME Verzeichnisse auf AFS haben, was beispielsweise beim LPCCS (und speziell dem Server zid-gpl.uibk.ac.at) der Fall ist.