SSH mit 2-Faktor-Authentifizierung

Immer öfter verwenden Dienste die sogenannte 2-Faktor-Authentifizierung um die Benutzerautorisierung sicherer zu gestalten. Hierbei wird neben der Eingabe eines Passworts ein zusätzlicher Code verlangt, der für jeden Login neu generiert wird. Diese Methode kann man auch nutzen um sich auf einem SSH Server einzuloggen. Auf dem Server wird das Google Authenticator PAM Modul benötigt. Bei FreeBSD kann dieses direkt aus den Ports installiert werden.
Schritt 1: "libqrencode" installieren
  1. cd /usr/ports/graphics/libqrencode
  2. make && make install
Schritt 2: "Google Authenticator" installieren
  1. cd /usr/ports/security/pam_google_authenticator
  2. make && make install
Schritt 3: Installiere auf deinem Smartphone den Google oder Microsoft Authenticator
Schritt 4: Den Befehl "google-authenticator" als der Benutzer ausführen, der sich später über ssh anmelden soll.
Hier wird ein Schlüssel generiert, welchen man alphanumerisch und als QR-Code erhält. Außerdem erhält man die Notfallcodes, welche man sich unbedingt notieren sollte. Diese Codes werden für die Anmeldung benötigt, falls man sein Smartphone mit dem Authenticator verliert.
(Alle Fragen mit "y" bestätigen)
  1. google-authenticator
Schritt 5: "/etc/pam.d/sshd" anpassen
  1. vi /etc/pam.d/sshd
folgende Zeile oberhalb "pam_unix.so" einfügen:
  1. auth            requisite       /usr/local/lib/security/pam_google_authenticator.so
Schritt 6: "/etc/ssh/sshd_config" anpassen
  1. vi /etc/ssh/sshd_config
folgende Zeile einfügen/anpassen:
  1. # Change to no to disable PAM authentication
  2. ChallengeResponseAuthentication yes
Schritt 7: ssh Server neustarten
Schließe für die Neuverbindung nicht die aktuelle Session. Bei einem Fehler ist das unsere letzte Möglichkeit, die Einstellungen rückgängig zu machen.
  1. service sshd restart

ACHTUNG

Benutzer die "google-authenticator" nicht ausgeführt haben, fehlt die ".google_authenticator" Datei. Existiert diese nicht, wird nicht nach dem 2-Faktor-Code gefragt und egal bei welcher Eingabe des Passwortes der Zugriff auf das System verweigert.
Screenshot: google-authentication