SSH pre-shared key authentication und Server Alias

Die Wartung von Servern oder auch das Arbeiten per SSH über ein Terminal kann mit ein paar Einstellungen einfacher und auch sicherer werden. Wie genau beschreibe ich kurz in diesem Blogbeitrag. Dabei gehe ich davon aus, das auf dem Server bereits ein SSH Dienst auf einem wilden Port (nicht 22), z.B. 22154 läuft und ein nicht-root Benutzer auf dem Server existiert.

Schritt 1: Pre shared key authentication
Passwörter sind eine schlimme Sache. Wenn sie gut sein soll kann man sie sich nicht merken und schreibt sie irgendwo hin. Sind sie kurz, sind sie per Brute Force Attacke knackbar. Dafür git es diese Art der Authentifizierung. Hierbei wird ein Schlüssel auf allen Client PCs angelegt, die auf den Server zugreifen sollen. Der Schlüssel (öffentlicher und privater Teil) liegt bei UNIX-Systemen (also auch beim Mac) unter dem Heimverzeichnis im Verzeichnis .ssh und trägt z.B. den Namen id_rsa.pub. Sollte das Verzeichnis oder die genannte Datei noch nicht existieren kann man sie einfach anlegen:

cd
mkdir .ssh
ssh-keygen -t rsa

Sofern das Programm nach einem Passwort fragt, einfach nichts eingeben und bestätigen. Hiernach sind jetzt die Datei id_rsa und id_rsa.pub im .ssh Verzeichnis. Die Datei id_rsa ist der private Schlüssel und darf nicht weitergegeben werden.

Um ohne Passworteingabe auf den Server zugreifen zu können, verbindet man sich mit seinem Benutzeraccount auf den Server (noch per Passwort) und wechselt dort in sein Benutzerverzeichnis und dort in das .ssh Verzeichnis.

cd
cd .ssh

Falls es nicht existiert wird es angelegt:

mkdir .ssh

Sofern schon andere PCs per pre shared authentication auf dieses Benutzkonto zugriefen dürfen, gibt es hier die Datei authorized_keys. Falls nicht wird sie per vi angelegt:

vi authorized_keys

In diese Datei fügt man den Inhalt der Datei id_rsa.pub ein. (Ihr erinnert Euch? Die Datei habt ihr vorhin lokal auf dem Rechner angelegt). Per :w und :q schreibt vi die Datei und schließt den Editor. Das war es schon. Ob alles klappt kann man testen, indem man nun auf dem Client wie bisher versucht sich zu verbinden. Zum Beispiel:

ssh -p 22154 meinname [at] meinserver [dot] de

Schritt 2: Alias anlegen
Da die Angabe des Ports, des Benutzernamens und des Servers lästig ist, sieht ssh hierfür eine Hilfe vor. Auf dem Client-PC wird im Verzeichnis .ssh die Datei config angelegt. Darin stehen alle Aliase für die externen Server. Die Datei hat zum Beispiel für den obigen Server den folgenden Aufbau:

# ssh (secure shell) config file
Host server
  Hostname meinserver.de
  User meinname
  Port 22154

Dadurch weiß ssh, dass unter dem Alias "server" eigentlich die URL meinname [at] meinserver [dot] de mit dem SSH Port 22154 gemeint ist. Um auf den Server zuzugreifen genügt nun also der folgende Befehl. Dank Schritt 1 sogar ohne Passwort.

ssh server

Ohne Passwort? Ja! Da wir den öffentlichen Schlüssel für die Anmeldung nutzen. Der Schlüssel kann auf Serverseite immer wieder entfernt werden. Natürlich können auch mehrere Schlüssel in die Datei auf dem Server. Dieses Vorgehen hilft nicht nur bei dem Befehl ssh sondern auch bei scp oder git.