Zugriff via SSH ohne Passworteingabe; Anmeldung erfolgt durch ausgetauschten SSH-Schlüssel
Meine privaten Systeme, vor allem mit Raspberry Pis und Raspbian, werden mehr was die Anmeldung mit Benutzername und Passwort an jedem System ein wenig zeitraubend ist. Die kleinen Rechner verwalte ich ausschließlich über SSH. Dafür ist für jede Anmeldung das jeweilige Passwort aus der Passwortverwaltung zu holen und der Einmal-Token anzustecken, bevor ich die SSH-Sitzung starten kann.
Um das ganze ein wenig einfacher für mich zu gestalten habe ich mich entschlossen SSH-Keys zu erstellen und auf den Servern zu konfigurieren, sodass eine passwortlose Anmeldung möglich ist.
Ich gehe in diesem Artikel nicht auf die Sicherheit und die Verwaltung von SSH-Schlüsseln ein. Es geht in diesem Beitrag rein um die technische Umsetzung für die passwortlose Anmeldung mithilfe von SSH-Schlüsseln.
Was ist SSH oder Secure Shell? Secure Shell oder SSH bezeichnet sowohl ein Netzwerkprotokoll als auch entsprechende Programme, mit deren Hilfe man auf eine sichere Art und Weise eine verschlüsselte Netzwerkverbindung mit einem entfernten Gerät herstellen kann. Quelle: 👉 https://de.m.wikipedia.org/wiki/Secure_Shell
An einem Beispiel zeige ich, wie der Austausch und die spätere Anmeldung ohne Passwort an einem Linux-Server erfolgt.
Ziel: Zugriff von einem Client, wie Laptop, Smartphone, Tablet, etc., auf einen Raspberry Pi.
Server:
- Raspberry Pi mit Raspbian „Buster“
Clients:
- Laptop mit Windows 10 und PuTTY
- iPad mit WebSSH Essential
SSH-Schlüssel erzeugen
In diesem Abschnitt verwende ich ein Linux-System.
Zuerst ist ein SSH-Schlüssel auf dem Laptop zu erstellen, der dann im nächsten Schritt an den Raspberry Pi übertragen wird.
Der SSH-Schlüssel wir mit dem Befehl erstellt:
ssh-keygen
In manchen Anleitungen im WWW findet man auch den Befehl "ssh-keygen -t rsa".
Dieser Befehl erzeugt einen rsa-Schlüssel. Im Standard, also ssh-keygen, wird immer automatisch ein RSA-Schlüssel erzeugt. Mit der Option -b lässt sich auch noch die Länge des Schlüssels individuell festlegen. 👉 https://man.openbsd.org/ssh-keygen
Ihr werdet bei der Erzeugung der Schlüssel nach einem Passwort gefragt. Die Eingabe ist optional und bedeutet Folgendes:
- KEIN Passwort = der Laptop verbindet sich über SSH sofort mit dem Raspberry Pi
- EIN Passwort = auf dem Laptop ist das Passwort einzugeben, BEVOR eine SSH-Verbindung zum Raspberry Pi aufgebaut wird.
Wenn ihr anschließend in das Verzeichnis "/home/benutzername/.ssh" auf dem Laptop schaut, wurden dort Uwe neue Dateien erstellt. Eine Datei enthält den öffentlichen und eine den privaten SSH-Schlüssel.
Wenn ihr den Standard bei der Schlüsselerzeugung gefolgt seit, wurde die Datei "id_rsa.pub" (= Öffentlicher Schlüssel), welcher nun auf den Raspberry Pi (= Server) zu kopieren ist.
SSH-Schlüssel auf Server kopieren
ssh-copy-id -i /home/username/.ssh/id_rsa.pub pi@raspberrypi
Ersetzt in dem Befehl
- "pi" durch euren Benutzernamen auf dem Raspberry Pi
- "raspberrypi" durch die IP-Adresse bzw. den DNS-Namen.
Bei diesem Kopiervorgang der Datei "id_rsa.pub" werdet ihr nach dem Passwort des Benutzers auf dem Raspberry Pi und ggfs. nach dem TOPT bei einer eingerichteten Zwei-Faktor-Authentifizierung gefragt.
Wurde der öffentliche SSH-Schlüssel auf den Raspberry Pi kopiert, könnt ihr euch nun vom Laptop auf den Raspberry Pi OHNE die Eingabe eines Passworts anmelden.
ssh pi@raspberrypi
SSH-Alias für Verbindung definieren
Es gibt noch eine Vereinfachung, um nicht immer ssh benutzername@server auf dem Laptop eingeben zu müssen.
Öffnet dazu die Datei "/home/benutzername/.bashrc" auf eurem Laptop.
/home/benutzername/.bashrc
In diese Datei tragt ihr ganz am Ende einen Alias für die SSH-Verbindung zu eurem Raspberry Pi ein, wie z.B.
alias rpissh='ssh pi@raspberrypi'
Zum Schluss noch ".bashrc" noch einmal neu laden und fertig.
source .bashrc
Gebt ihr auf eurem Laptop nun "rpissh" wird sofort eine SSH-Verbindung zum Pi hergestellt.
PuTTY - Schlüssel erzeugen mit PuTTYGEN
Auf einem Windows-PC verwendet man meistens PuTTY, um eine SSH-Verbindung zu einem Linux-Server herzustellen. Die Konfiguration ist auch hier sehr einfach und schnell durchzuführen, um eine passwortlose Anmeldung zu gewährleisten.
Von dieser Seite kann man PuTTY herunterladen: 👉 https://www.chiark.greenend.org.uk/~sgtatham/putty/
PuTTY ist auch Bestandteil von Portable Apps und kann damit “portable” installiert werden: 👉 https://portableapps.com/
Geht in das Verzeichnis, wo euer PuTTY installiert ist und öffnet dort das Tool "PUTTYGEN.EXE". In diesem Beispiel verwende ich die portable Version von PuTTY, ggf. ist PuTTY in einem anderen Verzeichnis auf eurem Gerät zu finden.
Erzeugt einen Schlüssel, indem ihr auf den Button "Generate" klickt und mit der Maus in dem Feld herumfahrt bis beide Schlüssel erzeugt wurden.
Speichert die erzeugten Schlüssel auf der Festplatte.
Den öffentlichen Schlüssel könnt ihr direkt kopieren und in die Datei "/home/benutzername/.ssh/authorized_keys" auf dem Raspberry Pi einfügen.
PuTTY - Schlüssel für Authentifizierung verwenden
Nachdem die Schlüssel erzeugt und der öffentliche Schlüssel auf dem Server eingetragen ist, kann PuTTY für die passwortlose Anmeldung konfiguriert werden.
Im Abschnitt "Connection --> SSH --> Auth" ist die Schlüssel-Datei auf euer Festplatte auszuwählen.
Nun könnt ihr euch auch von eurem Windows-PC ohne Passwort an einem Linux-Gerät anmelden.
iOS - Passwortlose Anmeldung
Für SSH-Verbindungen zu meinen Linux-Systemen verwende ich die App "WebSSH Essentials".
Bei der Verwendung von OTOP mit einem iOS-Device habe ich keine Verbindung mit der App WebSSH herstellen können. Ich habe deshalb zu Termius gewechselt, die dieses Anmeldeverfahren vollständig unterstützt.
Die Schlüssel habe ich auf meinem Windows-PC mit dem Tool "PuTTYGEN.EXE" erzeugt und anschließend den Eintrag auf dem Server in der Datei "/home/benutzername/.ssh/authorized_keys" hinzugefügt.
Zum Übertragen des privaten Schlüssels auf mein iOS Device habe ich iTunes genutzt.
Der SSH-Schlüssel wir automatisch von WebSSH Essential erkannt und kann dan für die Verbindungen ausgewählt werden.
Die Verbindung zum Linux-Server wird nun hergestellt, die Eingabe eines Passworts entfällt.
Zwei-Faktor-Authentifizierung
In den beiden Beiträgen beschreibe ich, wie eine Zwei-Faktor-Authentifizierung an einem Raspberry Pi mit einem TOPT (Time-based One-time Password) eingerichtet werden kann.
Es wird eine der beiden Varianten benötigt, wenn man eine Zwei-Faktor-Authentifizierung auch bei der passwortlosen Anmeldung verwenden möchte.
Für die Zwei-Faktor-Authentifizierung sind zwei Dateien zu editieren
- /etc/ssh/sshd_config
- /etc/pam.d/sshd
Für die beiden Dateien ist es sinnvoll ein Backup anzulegen, bevor dort Änderungen durchgeführt werden:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config-bak
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd-bak
Anpassen von /etc/ssh/sshd_config
In die Datei fügt ihr gan am Ende die folgenden Zeilen hinzu, um die Zwei-Faktor-Authentifizierung zu aktivieren.
ACHTUNG!!! Setzt den Schalter bei "PasswordAuthentication" erst nach einem erfolgreichen Tast auf "no"!!!
Verwendet ihr ein System mit vielen Benutzern macht es evtl. Sinn, eine Gruppe explizit für die Nutzung von SSH zuzulassen und dieser Gruppe die einzelnen Benutzer zu zuordnen. Achtet dabei unbedingt darauf, dass euer Benutzer ein Mitglied der Gruppe ist!
sudo groupadd -r sshadmin
Der Benutzer "pi" wird der Gruppe "sshadmin" hinzugefügt.
sudo usermod -a -G sshadmin pi
# Optional: Laesst nur Mitglieder der Gruppe "sshadmin" eine SSH-Verbindung herstellen
#AllowGroups sshadmin
# Dieser Schalter erlaubt die Verwendung von öffentlichen Schlüsseln
PubkeyAuthentication yes
# Passwort-Eingabe ist beim Anmelden
# no = nicht erforderlich, SSH-Anmeldung ist nur noch mit SSH-Schl ssel mooeglich
# yes = erforderlich, SSH-Anmeldung ist mit Passwort moeglich
PasswordAuthentication no
PermitEmptyPasswords no
# Zwei-Faktor-Authentifizierung wird aktiviert
# Es wird bei der Anmeldung bei dieser Einstellung abgefragt:
# * Passwort
# * TOPT
# Damit wird die Anmeldung auf eine DREI-Faktor-Anmeldung ausgeweitet!
# Soll nur SSH-Key und TOPT genutz werden ist die /etc/pam.d/sshd zu editieren.
# Die Zeile @include common-auth ist auszukommentieren
# Soll keine Zwei-Faktor-Authentifizierung genuzt werden, ist keyboard-interactive zu entfernen
# publickey ermöglicht dann nur eine Anmeldung mit den erstellten öffentlichen SSH-Schlüssel
AuthenticationMethods publickey,keyboard-interactive
Anpassen von /etc/pam.d/sshd
Mit den Einstellungen in der Datei "/etc/ssh/sshd_config" ist eine Drei-Faktor-Authentifizierung aktiviert worden, d.h. es ist erforderlich
- SSH-Schlüssel
- Benutzerpasswort
- TOPT (Time-based One-time Password)
Da dies oftmal des Guten zu viel ist, kann die Eingabe des Passworts deaktiviert werden, damit wird bei der ANmeldung dann abgefragt:
- SSH-Schlüssel
- TOPT (Time-based One-time Password)
sudo nano /etc/pam.d/sshd
In der Datei ist dann die Zeile auszukommentieren.
#@include common-auth
Zum Schluss ist der SSH-Dienst neu zu starten, um die Änderungen zu aktivieren:
sudo service ssh restart
Gib mir gerne einen Kaffee ☕ aus ❗️
Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.
Follow Me❗️