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, so dass eine Passwortsysteme 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 mit Hilfe 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:

      1. KEIN Passwort = der Laptop verbindet sich über SSH sofort mit dem Raspberry Pi
      2. 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-entifizierung 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.

      PUTTYGEN.EXE öffnen

      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.

      SSH-Schlüssel erzeugen
      SSH-Schlüssel erzeugen

      Speichert die erzeugten Schlüssel auf der Festplatte.

      SSH-Schlüssel speichern

      Den öffentlichen Schlüssel könnt ihr direkt kopieren und in die Datei „/home/benutzername/.ssh/orized_keys“ auf dem Raspberry Pi einfügen.

      PuTTY – Schlüssel für entifizierung 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.

      PuTTY - Öffentlichen SSH-Schlüssel einfügen
      PuTTY – Öffentlichen SSH-Schlüssel einfügen

      Nun könnt ihr euch auch von eurem Windows-PC ohne Passwort an einem Linux-Gerät anmnelden.

      iOS – Passwortlose Anmeldung

      Für SSH-Verbindungen zu meinen Linux-Systemen verwende ich die App „WebSSH Essentials“. ➡ https://apps.apple.com/de/app/webssh-essential/id958955657

      Die App konnte im App Store nicht gefunden werden. 🙁

      Bei der Vernwendung 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 untersützt.
      :arrow“ https://apps.apple.com/de/app/termius-ssh-client/id549039908

      ‎Termius - SSH client
      ‎Termius - SSH client
      Entwickler: Termius Corporation
      Preis: Kostenlos+

      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/orized_keys“ hinzugefügt.

      Zum Übertragen des privaten Schlüssel auf mein iOS Device habe ich iTunes genutzt.

      iTunes - Dateifreigabe
      iTunes – Dateifreigabe

      iTunes - Datei hinzufügen
      iTunes – Datei hinzufügen

      Der SSH-Schlüssel wir automatisch von WebSSH Essential erkannt und kann dan für die Verbindungen ausgewählt werden.

      WebSSH Essential – Neue Verbindung

      WebSSH Essential – Neue Verbindung
      WebSSH Essential – SSH-Schlüssel auswählen
      WebSSH Essential - Verbindung speichern
      WebSSH Essential – Verbindung speichern

      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.
      Zwei-Faktor-Authentifizierung am Raspberry Pi einrichten
      Anmeldung am Raspberry Pi mit einem YubiKey

      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 zu zulassen und dieser Gruppe die einzelnen Benutzer zu zuordnen.
      Achtet dabei unbedingt darauf, dass euer Benutzer ein Mitgliede 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

      1. SSH-Schlüssel
      2. Benutzerpasswort
      3. 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:

      1. SSH-Schlüssel
      2. 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 neuzustarten, um die Änderungen zu aktivieren:

      sudo service ssh restart

      Vier-Faktor-Authentifizierung

      Bei der Anmeldung an einem Linux-Server kann man auch 4 Faktoren abfragen:

      1. SSH-SChlüssel
      2. Passwort
      3. 1. TOPT YubiKey
      4. 2. TOPT Smartphone App
        1. Möchte man diese Form der Anmeldung, sind beide Zwei-Faktor-Anmeldungen auf dem System zu installieren und zu aktivieren.
          Zwei-Faktor-Authentifizierung am Raspberry Pi einrichten
          Anmeldung am Raspberry Pi mit einem YubiKey

          Natürlich besteht auch die Möglichkeit zwischen beiden Anmeldeverfahren zu wechseln, dazu ist einfach der jeweilige Eintrag in der „/etc/pam.d/sshd“ auszukommentieren bzw. zu aktivieren.

          Weiterführende Informationen

          https://linux.die.net/man/5/sshd_config

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.