SSH Schlüsselpaare einsetzen

SSH Pubkeys für Login nutzen

SSH

Über das Netzwerkprotokoll Secure Shell lassen sich Server nicht nur steuern, sondern auch Daten verschlüsselt übertragen. Alternativ zum Passwort können sogenannte Pubkeys verwendet werden. Wofür ist das gut? Zum Einem für Automatismen, die nicht-interaktiv auf dem Server ausgeführt werden sollen, aber auch um ein Eindringen über ein erspähtes Passwort zu verhindern. So lässt sich ebenfalls der Kreis der autorisierten Nutzer durch eine Liste der gültigen Schlüssel auf dem Server pro Nutzerkonto verwalten. Standardmäßig ist der Port 22 für den Transfer konfiguriert und beim Aufruf der Befehle voreingestellt. Dieser ist bei eventuellen Firewall-Regeln zu berücksichtigen, bez. bei Abweichung auch per Parameter gesondert mitzuteilen.
Die folgenden Kommandozeilen zeigen das Anlegen von Schlüsseln und die Verwaltung dieser.

Für die Nutzung des Protokolls gibt es eine Reihe an Tools, die mit der Installation wie folgt aufgespielt werden können (vorgegeben für root, sonst Präfix "sudo" ggf. vor die Befehle setzen):

1. Aktualisierung der apt Paketliste:
apt update

2. Installation der benötigten Tools:

Für Server (auf die sich verbunden wird):
apt install openssh-server

Für Clients (Maschinen die sich mit dem Server verbinden möchten):
apt install openssh-client

Achtung: apt install ssh installiert beide Tools und macht so eine Verbindung auch zum Client möglich. Dies sollte stets wissentlich geschehen, daher ist die obige Angabe der Installationsziele empfohlen.


Serververbindung aufbauen - via Passwort

Vier Bildschirme die Serververbindungsaufbau via Passwort visualiseren

Standardmäßig gelingt die Verbindung zum Server (hier mit dem Beispiel IP 215.9.30.144) mit der einfachen Eingabe von

ssh -p 22 root@215.9.30.144

Wie erwähnt kann die Angabe des Ports mit "-p 22" weggelassen werden, wenn es sich um den Port 22 handelt. Bei Abweichung muss an dieser Stelle dann der aktuell konfigurierte Port des Servers stehen.

Was geschieht ist, dass das nun einzugebende Passwort für den Nutzer auf dem Server (in diesem Fall "root") verglichen wird und bei Gleichheit die Verbindung erlaubt. Falls es sich um die erste Verbindung zum Server handelt wird eine Frage erscheinen, die den Fingerprint des Servers anzeigt und bestätigt werden muss. So kann die Echtheit des Servers hinter dieser IP festgestellt werden. Wenn die IP nämlich per host Datei oder andere Wege umgebogen würde, stimmte der Fingerprint nicht mehr überein und es erscheint eine Warnmeldung, die auf alle Fälle ernst genommen und untersucht werden sollte.

Serververbindung aufbauen - via Pubkey

Vier Bildschirme die Serverbindung via Pubkey visualisieren

Der Verbindungsaufbau gelingt analog zu dem vorhergehend beschriebenen Weg, also mit

ssh root@215.9.30.144

Wenn der Server nun den mitgesendeten Schlüssel als gültig erkennt, wird er die Verbindung auch ohne Eingabe eines Passworts erlauben. Der Abgleich erfolgt nach einer Liste, die sich im Home-Verzeichnis des Nutzers als den man sich verbinden möchte, in diesem Fall als root, befindet:

/root/.ssh/authorized_keys

Zum Bearbeiten ist ein einfacher Eintrag des Pubkeys des jeweiligen Nutzers als neue Zeile nötig. Falls es die Datei noch nicht gibt wird sie erstellt und automatisch von SSH gefunden.

nano /root/.ssh/authorized_keys

Der Inhalt sieht mit 3 Nutzern (Schlüssel ausgeblendet) folgendermaßen aus:
   ssh-rsa [lange Zeichenfolge] Max@Mustermann
   ssh-rsa [lange Zeichenfolge] Maxine@Musterfrau
   ssh-rsa [lange Zeichenfolge] Service@Tec

Der Name als dritte Angabe in jeder Zeile ist Freitext und kann ohne Auswirkung auch z.B. nur auf dem Server geändert werden für eine bessere Lesbarkeit und Zuordnung des Nutzers.


Loginmethode auf Server einstellen

Drei Bildschirme die die Loginmethode auf Servern darstellen

Standardmäßig sind beide Verbindungsarten, also Passworteingaben und Pubkeys, möglich. Dies ist auch dann die Standardeinstellung, wenn die Konfigurationsdatei keinen spezifischen Wert vorgibt und die Parameter mit # auskommentiert sind. Um das Verhalten wunschgemäß anzupassen ist ein Editieren der folgenden Datei auf dem Server nötig:

nano /etc/ssh/sshd_config

...
PasswordAuthentication no
PubkeyAuthentication yes
...

Zu beachten ist, dass ggf. das Raute-Symbol beim bestehenden Eintrag noch zu entfernen ist.

Vollständigkeit halber sei erwähnt, dass es neben einer Konfiguration der einzelnen auch möglich ist eine Two-Factor-Authentication oder sogar Multi-Factor-Authentication zu erstellen. Dabei kann beispielsweise ein Smartphone oder YubiKey eingebunden werden. Die Grundeinstellung erfolgt in der selben Konfigurationsdatei.

Das Schlüsselpaar

Generiert wird immer ein Schlüsselpaar, wobei es sich im Prinzip wie mit einem Schlüssel und dem Schließzylinder als Gegenstück verhält.

- Der PrivateKey hat den Standardnamen id_rsa und soll nicht weitergegeben werden. Dieser Schlüssel muss sich auf dem Client befinden, damit der Server den Pubkey abgleichen kann und die Verbindung zulässt.

-Der PublicKey (kurz Pubkey) hat den Standardnamen id_rsa.pub und wird in die Listen der authentifizierten Nutzer auf dem Server eingetragen. Bei einer Verbindungsanfrage wird mit dem Hashwerts des PrivateKeys von der Seite des Clients abgeglichen.

SSH Schlüssel generieren mit Standardnamen

Zunächst muss klar sein, ob sich nicht bereits ein Schlüssel im Ordner befindet der versehentlich überschrieben werden könnte.

ls -l ~/.ssh

Werden Dateien mit dem Namensschema id_rsa_xxx und id_rsa_xxx.pub angezeigt sind bereits Schlüssel vorhanden, es können jedoch weitere Schlüssel hinzugefügt werden.

Falls noch kein Schlüsselpaar vorhanden ist lässt sich nun eins erstellen mit dem Befehl:

ssh-keygen -t rsa -b 4096

Standardmäßig wird heutzutage ohne Zugabe der Parameter (also lediglich der Befehl ssh-keygen) automatisch ein RSA 2048 Bit Schlüssel generiert. Genügt das aus späteren resultierenden Vorgaben einmal nicht kann stattdessen ein RSA Schlüssel mit 4096 Bit wie oben beschrieben erstellt werden.
Der Pubkey, der auf die Liste der erlaubten Zugänge per SSH auf dem Server eingetragen werden muss, kann im einfachsten Fall so ausgegeben werden:

cat ~/.ssh/id_rsa.pub

Die Ausgabe muss dann serverseitig in eine neue Zeile der Serverkonfigurationsdatei für autorisierte Nutzer per SSH eingetragen werden.

nano /root/.ssh/authorized_keys


Mehrere Schlüssel verwenden

Es kann vorkommen, dass es für bestimmte Projekte oder Server sinnvoll sein kann mehr als einen Schlüssel auf dem selben Client zu haben und die Verbindung dann mit dem jeweils passenden Schlüssel herzustellen. In diesem Fall hilft die Unterscheidung der Schlüssel über andere Namen und/oder Pfade.


  • Schlüsselpaar generieren mit abweichendem Pfad und Namen

    Der Schlüssel muss in einem für den Benutzer beschreibbaren Ordner erstellt werden.

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_myserver

  • Verbindung über Schlüssel mit abweichendem Pfad und Namen.

    Bei der Verbindung zu einem Server lässt sich der abweichende Name und eventuell Pfad mit angeben.
    ssh -i ~/.ssh/id_rsa_myserver root@215.9.30.144


Pubkey aus PrivateKey erneut generieren

Aus dem PrivateKey kann jederzeit der Pubkey erstellt werden, falls nur der PrivateKey vorhanden ist. Dies gelingt mit dem Befehl, hier für den Standardschlüssel:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

Mehr Infos zur Konfiguration von OpenSSH findet ihr hier.

Rony Schell - Trainer und Sys. Admin




Viel Spass beim ausprobieren.
Euer Rony. 


Wenn ihr Fragen habt, meldet euch: info@mobilistics.de oder folgt uns auf Twitter.