SSH ist ein Protokoll, um eine verschlüsselte Verbindung zu einem Rechner oder Server herzustellen und ist insbesondere bei der Linux-Administration die häufigste Verbindungsart. Standardmäßig meldet sich der Nutzer dabei per Benutzername und dazugehörigem Passwort beim Server an. In dieser Anleitung möchte ich dir nun eine weitere Methode vorstellen –  der SSH Key basierten Authentifizierung.

Wie funktionieren SSH Keys?

Wie bereits zu Beginn erwähnt, gibt es verschiedene Möglichkeiten, eine Verbindung per SSH mit dem Server herzustellen. Die einfachste und dir sicherlich bereits bekannte ist der Login mit Nutzername und Passwort. Dies ist jedoch nicht die bequemste und zugleich deutlich sichere Variante.

Obwohl die Passwörter alle verschlüsselt zum Server gesendet werden, sind diese oft wenig komplex oder lang genug, um vor Angreifern als sicher zu gelten. Zwar gibt es mit Firewalls wie fail2ban Möglichkeiten, dass etwa fehlerhafte Loginversuche zum Ban führen, dennoch haben sich SSH Keys als die bessere Variante herausgestellt.

SSH Keys bestehen aus einem Schlüsselpaar:

  • einem privaten Schlüssel (engl private key, der nur dem Nutzer bzw. dem Rechner des Nutzers bekannt ist und niemals mit anderen geteilt werden darf) und einem daraus erstellten
  • öffentlichen Schlüssel (engl. public key, der später zur SSH Authentifizierung verwendet wird).

Das geniale an dieser Methode ist, dass der öffentliche Schlüssel mit jedem geteilt werden kann. Wenn du z.B. Zugriff auf einem Server von einem Bekannten bekommen möchtest, so gibst du deinem bekannten den öffentlichen Schlüssel, den er dann im Server hinterlegt. So kannst du dich dann auf dem Server einloggen, ohne dass dein Bekannter irgendwelche geheimen Daten wie zum Beispiel Passwörter von dir kennt. Nur der private Schlüssel kann den öffentlichen Schlüssel entschlüsseln.


Installationsanleitung

Hier wird dir gezeigt, wie SSH Keys erstellt und verwendet werden. Zuvor solltest du jedoch unbedingt den Abschnitt „Wichtige Tipps“ lesen und am besten auch befolgen, um mögliche Sicherheitsrisikos zu reduzieren.


Schritt 1: Wie erstelle ich einen SSH Key?

Der erste Schritt besteht im Generieren eines SSH Keys. Dieser Schritt sollte nicht auf dem Server, sondern auf deinem PC ausgeführt werden. Sofern du keinen PC mit Windows verwendest, kannst du es auch auf deinem lokalen Server wie z.B. Raspberry Pi ausführen.

Dazu gibst du folgende Befehl in der Konsole ein:

ssh-keygen -t dsa

Standardmäßig werden die Keys in /home/Benutzername/.ssh/id_rsa gespeichert. Dies kannst du mit Enter bestätigen.

Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):

Anschließend musst du ein Passwort für den private key vergeben und dieses anschließend erneut eingeben. Der Schritt ist zwar optional, ist aber dringend zu empfehlen. Da das Kennwort nur selten benötigt wird, kannst du hier ein langes, zufällig generiertes Passwort verwenden.

Nun hast du die private und public keys erstellt, die zur Authentifizierung per SSH verwendet werden können. Im nächsten Schritt muss der public key nun auf den Server kopiert werden, auf dem du dich einloggen möchtest.

Schritt 2: Wie verwende ich einen SSH Key?


Die einfachste Methode zum „Installieren“ eines public keys auf einen Remote Server ist das Tool ssh-copy-id.

  • Grundvoraussetzung: Du bist momentan auf dem PC/Server eingeloggt, auf dem du den SSH Key erstellt hast. Ebenso musst du Zugriff auf den Remote Server haben.

Gebe in der Konsole folgendes ein:

ssh-copy-id Benutzername@Remote_Host
  • Benutzername gibt den Username auf dem Remote Server an.
  • Remote-Host ist die IP bzw. der Hostname des Remote Servers

Möglicherweise musst du noch mit yes die Eingabe bestätigen.

Anschließend wirst du noch aufgefordert, das Passwort des Nutzers auf dem Remote Server einzugeben.


Wichtige Tipps

Die Schritte eins und zwei haben dir gezeigt, wie SSH Keys erzeugt und installiert werden. Jedoch gibt es einige Punkte, die du unbedingt beachten solltest.


Tipp 1: Nicht den Benutzer root für SSH verwenden

Häufig loggen sich Nutzer direkt mit dem Benutzer root in den Server ein. Der Benutzer root verfügt i.d.R. über root-, also Administrationsrechte und kann sämtliche Servereinstellungen und Daten verändern. Um für einen möglichen Angreifer den Zugriff zu erschweren, empfehlt es sich, einen nicht-root-Nutzer anzulegen, der etwa für den SSH Login verwendet wird.

Nach dem SSH Login kannst du schließlich immernoch mit dem Befehl sudo -i nach einer Passworteingabe zum root wechseln.

Um einen Benutzer für SSH anzulegen, gehst du wie folgt vor (dabei musst du per root eingeloggt sein):

  • Erstellen eines neuen Benutzers:
useradd -m -d /home/neuerBenutzername -s /bin/bash neuerBenutzername
  • einloggen in neuen Benutzer:
su neuerBenutzername
  • Befolgen der Schritte 1 bis 2 (siehe weiter oben)

Tipp 2: SSH Login per Nutzername und Passwort sperren

Es ergibt Sinn, zukünftig bei allen SSH-Verbindungen auf SSH Keys zu bestehen. Dadurch ist der Login per Benutzername und Passwort nicht mehr möglich.

Wichtig ist, dass vor diesem Schritt unbedingt getestet werden sollte, ob der Login per SSH Key funktioniert. Denn wenn nicht, hast du dich vom eigenen Server ausgesperrt.

Um den Passwort-Login zu deaktivieren, musst du die Datei sshd_config im Verzeichnis /etc/ssh editieren. Das geht am besten mit:

nano /etc/ssh/sshd_config

Suche darin nach PasswordAuthentication und ändere PasswordAuthentication yes zu PasswordAuthentication no .

Starte anschließend den SSH-Dienst neu (dabei kann die SSH-Verbindung kurz abbrechen):

service ssh restart

Kommentieren

Ein Kommentar

  • Spacefed sagt:

    Hallo, danke für die Anleitung.
    Habe bei mir auf dem Server (Ubuntu Server 16.04) SSH eingerichtet. Das Problem welches ich nun habe ist, dass wenn ich den Server einschalte und mich dann per SSH anmelden will der Key nicht akzeptiert wird (server refused our key). Melde mich dann mit dem Passwort an. wenn ich danach die Verbindung wieder trenne und mich erneut mit dem SSH Key anmelde geht es ohne Probleme, auch dauerhaft. Nächstes mal den Server eingeschaltet oder neu gestartet geht es beim erste mal wieder nicht mehr und die weiteren male funktioniert es.
    Verbinden tu ich mich mit Putty auf Windows 7. Irgend eine Idee?