Raspberry Pi SSH-Verbindung mit Schlüsselpaar absichern

Ziel: der Zugang zu einem Server per SSH-Verbindung soll nur noch mit Authentifizierung per Schlüsselpaar gestattet werden.

Was du hast:

  • du hast z.B. einen Raspberry Pi (oder ein anderes Gerät), auf dem ein SSH-Server vorhanden und aktiv ist
  • du benötigst ein Gerät, z.B. dein PC, mit dem du dich auf deinem SSH-Server als Client einwählst
  • das Programm PuTTY, Information und Download hier https://www.putty.org
  • die Erweiterung PuTTYGen(erator), Information und Download hier https://www.puttygen.com

Was du willst: es soll zukünftig nur noch möglich sein, dass sich ausgewählte Benutzer*innen anmelden und dies ausschließlich mit einem zuvor erstellen Schlüssel(paar). Die Anmeldung ohne diesen Schlüssel, etwa lediglich per Benutzername und Passwort, wird danach NICHT mehr möglich sein.

Was du benötigst: ein Schlüsselpaar, bestehend aus einem privaten Schlüssel (für den Client) und einem öffentlichen Schlüssel (für den SSH-Server). Ferner selbstverständlich eine funktionierende Verbindung zwischen diesen beiden Geräten sowie die IP-Adresse des SSH-Servers (hier im Beispiel, eines Raspberry Pi).

Diese Anleitung erklärt dir die Arbeitsschritte für einen PC mit Windows als Betriebssystem. Unter Linux ist der Umweg über PuTTY nicht zwingend erforderlich!


Wie du den Minicomputer Raspberry Pi zum ersten Mal einrichtest erklärt diese Anleitung Raspberry Pi Ersteinrichtung.
Auf dem Raspberry Pi ist im Beispiel zur Anleitung der Benutzer „franz“ angelegt worden. Dieser hat ein eigenes Passwort und darf sich mit dem Befehl „sudo“ besondere Rechte verleihen. Dein Raspberry Pi ist im Beispiel unter der IP Adresse 172.16.140.100 über Port 22 per SSH erreichbar. Du musst natürlich jeweils deinen eigenen gewählten Benutzernamen sowie deine zutreffende IP Adresse angeben.

Du hast deinen Raspberry Pi bereits eingerichtet und mit deinem Netzwerk verbunden, dein Raspberry Pi ist eingeschaltet, ebenso dein PC – es kann losgehen!

Vorarbeit: Verbindungsprofil in PuTTY anlegen und speichern
Wir legen nun als erstes in PuTTY ein Verbindungsprofil für deinen Raspberry Pi an: Dazu gibst du die dir bekannte IP Adresse deines Raspberry Pi an, benennst das anzulegende Profil (z.B. „RaspberryPi“), gibst die zutreffende IP Adresse an (hier 172.16.140.100) und stellst den korrekten Port ein (i.d.R. „22“). Du bestätigst mit „Save“. Es sollte jetzt das Verbindungsprofil „RaspberryPi“ vorhanden sein. Mit diesem kannst du zukünftig per einfachem Doppelklick auf den Profilnamen die Verbindung per SSH herstellen.
SSH-Zugang PuTTY Session anlegen
1. Vorbereitung des Schlüsselpaares am PC
Du startest am PC das Programm PuTTYGen. In der Menüzeile findest du den Eintrag „Key“. Hier stellst du sicher, dass „SSH-2 RSA key“ oder eine andere sichere Verschlüsselungsmethode ausgewählt ist. Als Schlüssellänge wählst du z.B. „2048“ bits aus.
SSH-Zugang PuTTYGen Verschlüsselungsmethode
Anmerkung: eine Erklärung der diversen Verschlüsselungsmethoden und der Bedeutung der Schlüssellänge führt hier zu sehr ins Detail. Für die ausschließliche Benutzung innerhalb deines Heimnetzes reichen die hier gemachten Einstellungen aber aus.

Im nächsten Schritt generierst du das Schlüsselpaar mit einem Klick auf „Generate“. Beweg den Mauscursor über die leere Fläche, bis der Schlüssel fertiggestellt ist. Dann benennst du den Schlüssel im Feld „Key comment“ und fügst zur Sicherheit optional eine Schlüssel-Passphrase hinzu. Damit kann der entstandenen Schlüssel nur nach Eingabe dieser Passphrase genutzt werden.
Im oberen Bereich siehst du eine Abfolge von Ziffern und Buchstaben: Dies ist der Inhalt deines öffentlichen Schlüssels.
Speichere den öffentlichen und privaten Schlüssel ab und benenne beide nach Wunsch, z.B. „raspi_pub“ für den öffentlichen Schlüssel und „raspikey“ für den privaten Schlüssel. Die Dateiendung „.ppk“ wird automatisch an den privaten Schlüssel angehängt.
Lass das Fenster von PuTTYGen noch offen.
SSH-Zugang PuTTYGen Schlüsselpaar anlegen
2. Vorbereitung des Speicherortes für den öffentlichen Schlüssel auf dem Raspberry Pi
Jetzt schaltest du dich auf deinen Raspberry Pi, die Anmeldung erfolgt weiterhin per Benutzername und Passwort. Dazu wählst du in PuTTY das zuvor angelegte Profil „RaspberryPi“ aus und bestätigst mit „Open“ oder klickst alternativ doppelt auf den Profilnamen. Du wirst nach dem Namen gefragt und musst anschließend das Passwort eingeben.
Du befindest dich nun im Ordner /home auf deinem Raspberry Pi. Hier verschaffst du dir mit dem Befehl ls -al eine Übersicht über den Inhalt des /home Ordners. Sollte hier noch kein Ordner „.ssh“ zu finden sein, muss dieser (versteckte, das zeigt der Punkt vor ssh) Ordner noch angelegt werden mit dem Befehl mkdir .ssh. Eine erneute Eingabe von ls -al zeigt dir, dass der Ordner jetzt vorhanden ist.

Innerhalb dieses neuen Ordners mit dem Pfad home/franz/.ssh legst du nun die Datei „authorized_keys“ an und füllst diese mit deinem erstellten öffentlichen Schlüssel:

  • mit dem Befehl nano home/franz/.ssh/authorized_keys erstellst du die Datei. Die Ansicht ändert sich...
  • im Fenster kann dann der öffentliche Schlüssel eingefügt werden. Am einfachsten geht dies, indem du unter PuTTYGen den Schlüssel in die Zwischenablage kopierst und per rechtem Mausklick in die Datei authorized_keys einfügst.
    SSH-Zugang authorized_keys

Danach speicherst du die nun gefüllte Datei „authorized_keys“ mit der Tastenkombination STRG + o ab und beendest die Ansicht mit STRG + x.
Damit ist der öffentliche Schlüssel auf deinem SSH-Server (hier auf deinem Raspberry Pi) in die Datei authorized_keys im Ordner home/franz/.ssh eingetragen.

3. PuTTY mit dem privaten Schlüssel bekannt machen
Damit du dich nun mit PuTTY und Schlüsselpaar Authentifikation anmelden kannst, musst du dem Programm erst mitteilen, welcher Schlüssel für die gewünschte Verbindung genutzt werden soll und wo sich dieser befindet. Du wählst daher dein zuvor angelegtes Verbindungsprofil aus. Dann wechselst du unter PuTTY zur Ansicht „Connection > SSH > Auth“ und trägst hier per Klick auf die Schaltfläche „Browse…“ deinen privaten Schlüssel ein.
SSH-Zugang PuTTY Anmeldung mit Schlüsselpaar
Schließlich speicherst du deine Einstellungen ab mit „Save“.
SSH-Zugang PuTTY Schlüssel-Authentifizierung
4. Verbindung mit dem Schlüsselpaar herstellen
Du öffnest nun die SSH-Verbindung zum Raspberry Pi durch Doppelklick auf das Verbindungsprofil. Es erscheint die Abfrage des Benutzernamens. Nach Eingabe wird die zum Schlüsselpaar gehörende Passphrase abgefragt, welche du eingibst (Achtung: du siehst hier keine Einträge nach Tasteneingabe). Stimmen die Angaben überein, wird die Verbindung hergestellt und du bist auf deinem Raspberry Pi angemeldet.
SSH-Zugang erfolgreiche Anmeldung mit Schlüsseln
Damit funktioniert die Authentifizierung der Verbindung per SSH auf deinen Raspberry Pi per öffentlichem (public) und privatem (private) Schlüsselpaar und zugehörender Passphrase!

5. Optionale weitere Absicherungsarbeiten
Per PuTTY kannst du dich nun per Schlüsselpaar anmelden. Allerdings ist auch die Anmeldung per Eingabe von Benutzername und Passwort weiterhin möglich. Die nächsten Arbeitsschritte ermöglichen dir, auf die Anmeldung per Name und Passwort vollständig zu verzichten. Dafür schaltest du dich zunächst wieder per SSH-Verbindung auf deinen Raspberry Pi.

Jetzt begibst du dich mit dem Befehl sudo nano /etc/ssh/sshd_config in die Konfigurationsdatei des SSH-Servers. Hier bearbeitest du bzw. ergänzt du bei Bedarf die folgenden Zeilen (Einträge hinter einem # sind nicht aktiv bzw. dienen der Erklärung):

#verbietet Passwortanmeldung PasswordAuthentication no
#erlaubt Anmeldung mit Schlüssel PubkeyAuthentication yes
#Erlaubt nur user franz AllowUsers franz
#weitere optionale Absicherungen PermitRootLogin no StrictMode yes AllowTcpForwarding no

Du speicherst deine Einstellungen mit der Tastenkombination STRG + o ab und beendest die Ansicht mit STRG + x. Jetzt startest du den SSH-Server neu mit dem Befehl sudo systemctl restart sshd.

6. Testen
Um dich davon zu überzeugen, dass die Anmeldung via SSH nun ausschließlich für den Benutzer franz per Schlüsselpaar Authentifikation möglich ist, probieren wir es einfach aus.
Du wirst sehen, dass ausschließlich der Benutzer franz mit der Anmeldung per Schlüssel-Authentifizierung die Verbindung herstellen kann.

  • Benutzer pi gehört nicht zu den „AllowedUsers“ in der konfigurierten Einstellung unter Kapitel 5. in der Datei /etc/ssh/sshd_config
  • Benutzer franz und Passwort Anmeldung sind nicht erlaubt in der konfigurierten Einstellung unter Kapitel 5. in der Datei /etc/ssh/sshd_config durch den Eintrag „PasswordAuthentication no
    SSH-Zugang abgesichert
  • Benutzer franz und Schlüsselpaar Anmeldung sind erlaubt in der konfigurierten Einstellung unter Kapitel 5. in der Datei /etc/ssh/sshd_config durch den Eintrag unter „AllowUsers franz“ und „PubkeyAuthentication yes

Damit hast du den SSH-Zugang zu deinem Raspberry Pi zusätzlich abgesichert. Ohne privaten Schlüssel kann eine Verbindung nicht erfolgen. Zusätzlich muss bei Benutzung der Anmeldemethode eine Passphrase eingegeben werden, ohne die eine erfolgreiche Anmeldung ebenfalls nicht erfolgt. Es sind also zwei Faktoren zur Anmeldung erforderlich!

Anmerkung: wenn du eine automatisierte Verbindung per SSH und Schlüsselpaar-Anmeldung einrichten möchtest, dann ist die Eingabe einer Passphrase hinderlich (denn du müsstest jedes mal selbige eingeben).
Du kannst ein weiteres Schlüsselpaar nach dieser Anleitung erstellen, ohne eine Passphrase unter Schritt 1. Vorbereitung des Schlüsselpaares am PC anzugeben. Das erlaubt dann einen automatisierten Anmeldeprozess.

Bei Fragen zum Thema, Anmerkungen oder konstruktiver Kritik kannst dich gerne im Forum anmelden und einen Beitrag schreiben!

---

Vielen Dank an den User the other für diese Anleitung!

Wenn Du Fragen zu dieser Anleitung hast, dann schau doch einfach mal bei uns im vorbei!