Passwortloser SSH Zugriff

In meinem Heimnetzwerk betreibe ich diverse virtuelle Maschinen, auf denen Services laufen die ich tagtäglich benutze oder die zum Ausprobieren neuer Tools dienen. Auf diese verbinde ich mich in der Regel via SSH. Damit ich mir nicht für jede virtuelle Maschine ein Passwort merken muss, habe ich jeweils SSH Keys für den passwortlosen Zugriff eingerichtet.

SSH Keys erstellen

Ein SSH Key bzw. ein SSH Keypair ist dabei sehr schnell erstellt. Alles was wir dafür tun müssen ist das Tool ssh-keygen mit den entsprechenden Parametern aufzurufen:

1
ssh-keygen -t ed25519 -f $env:USERPROFILE/.ssh/hostname_id_ed25519

Mit dem ersten Parameter -t ed25519 wählen wir den Algorithmus aus, der zum Erstellen des Keys verwendet wird. Standardmässig wird der RSA Algorithmus verwendet, wir verwenden in diesem Fall jedoch den heutzutage empfohlenen Ed25519 Algorithmus.

Mit dem zweiten Parameter -f $env:USERPROFILE/.ssh/hostname_id_ed25519 teilen wir dem Tool mit wo der Key gespeichert werden soll. Standardmässig erstellt das Tool einen Key in der Datei $env:USERPROFILE/.ssh/id_ed25519 und grundsätzlich würde es reichen, wenn wir leidglich einen Key erstellen und diesen für den Zugriff auf alle virtuellen Maschinen verwenden. Ich bevorzuge es jedoch, für jede virtuelle Maschine einen eigenen Key zu erstellen. Deshalb füge ich dem Dateinamen den Namen der virtuellen Maschine hinzu, für die ich den Key verwenden werde.

Wenn wir das Tool wie beschrieben ausführen, werden wir nach einem optionalen Passwort gefragt, mit dem der private Key verschlüsselt wird. Danach wird das Keypair erstellt. Es besteht aus dem private Key der in der Datei $env:USERPROFILE/.ssh/hostname_id_ed25519 abgelegt wird, sowie dem public Key der in der Datei $env:USERPROFILE/.ssh/hostname_id_ed25519.pub abgelegt wird.

Public Key veröffentlichen

Als nächstes müssen wir den public Key veröffentlichen bzw. auf der virtuellen Maschine, auf die wir uns mit dem dazugehörigen private Key verbinden wollen, hinterlegen. Dazu kopieren wir den Inhalt der Datei $env:USERPROFILE/.ssh/hostname_id_ed25519.pub und kopieren diesen in die Datei ~/.ssh/authorized_keys auf der virtuellen Maschine.

Den Inhalt des public Keys kannst du übrigens ganz einfach über den folgenden Befehl kopieren:

1
cat $env:USERPROFILE/.ssh/hostname_id_ed25519.pub | clip

Passwortloses Login testen

Damit haben wir alles erledigt um das passwortlose Login zu nutzen. Bei Login via SSH müssen wir dem SSH Client lediglich angeben, welche Identity, also welchen Key, der Client für die Verbindung verwenden soll. Dies machen wir folgt:

1
ssh -i $env:USERPROFILE/.ssh/hostname_id_ed25519 hostname

Haben wir alles richtig gemacht sollte die Verbindung ohne Passwortabfrage aufgebaut werden.

SSH Host konfigurieren

Damit wir nicht jedesmal angeben müssen, welche Identity beim Verbinden mit einer virtuellen Maschine verwendet werden soll, können wir in der Konfigurationsdatei von SSH ein Alias für die verschiedenen Hosts hinterlegen. Dazu erstellen wir die Datei $env:USERPROFILE/.ssh/config und fügen den folgenden Inhalt ein:

1
2
3
4
Host host
Hostname hostname
User username
IdentityFile .ssh/hostname_id_ed25519

Anschliessend können wir uns direkt mittels ssh host auf die virtuelle Maschine verbinden und müssen dabei kein Passwort mehr verwenden.

Falls du mit dem beschriebenen Vorgehen unter Windows Probleme haben solltest; die Datei $env:USERPROFILE/.ssh/config sowie die private Keys müssen dem angemeldeten Benutzer gehören und nur der angemeldete Benutzer darf darauf Zugriff haben, ansonsten wird SSH diese nicht verwenden. Stelle also sicher dass die Berechtigungen unter Windows entsprechend gesetzt sind!