Getestet unter Debian 9 'Stretch'. Funktioniert auch mit Raspbian, also dem Raspberry Pi.

Mit dem Google Authenticator ist es möglich, der SSH-Einwahl eine zusätzliche Sicherheitsebene hinzuzufügen. Man muss also nicht nur den entsprechenden Benutzer und das Passwort kennen, sondern noch im Besitz eines Gerätes sein - in diesem Fall dem Smartphone.

Smartphone vorbereiten

Für unser Smartphone brauchen wir eine App wie "Google Authenticator", "FreeOTP" oder "andOTP". Ich bevorzuge "andOTP", da man dort die Einträge auch sortieren, mit Bildern versehen und eine Sicherung seiner Codes erstellen kann.

Server konfigurieren

Google Authenticator installieren:

sudo apt install libpam-google-authenticator

Nun muss der Google Authenticator auf dem Server eingerichtet werden. Das muss unter dem Account geschehen, mit dem man sich später per SSH einloggen will. 

google-authenticator

Die Nachfrage entsprechend beantworten:

Do you want authentication tokens to be time-based (y/n) y

Nun erhält man einen QR-Code sowie einige Scratch Codes:


Your new secret key is: XXI4HTGMVI6NH65P
Your verification code is 935308
Your emergency scratch codes are:
  75101176
  70995733
  51553583
  40848021
  44609445

Die weiteren Nachfragen entsprechend (den eigenen Vorlieben) beantworten:

Do you want me to update your "/home/pi/.google_authenticator" file (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Den Barcode scannt man nun mit dem Smartphone ab, danach landet ein neuer Eintrag in der Google Authenticator-App.

Nun bearbeitet man die Datei /etc/pam.d/sshd und fügt folgende Zeile ein:

auth required pam_google_authenticator.so

Jetzt muss noch die SSH-Konfiguration bearbeitet werden:

sudo vi /etc/ssh/sshd_config

...und die Challenge Response Authentifizierung aktiviert werden:

ChallengeResponseAuthentication yes

Am Schluss muss noch der SSH-Dienst neugestartet werden:

sudo service ssh restart

Was für eine Funktion haben die Scratch Codes?

Die Scratch-Codes sind Einmal-Kennwörter die man immer dann verwenden kann, wenn das Smartphone kaputt geht oder man es gerade nicht dabei hat. Sind alle Einmal-Kennwörter verbraucht, kann man sich z.B. wieder eine neue Authenticator-Datei erstellen lassen.

SSH-Einwahl testen

Beim nächsten Einloggen per SSH wird nun nicht mehr nur nach dem Passwort gefragt, sondern auch nach dem "Verification Code". Diese erhält man nun vom Smartphone, indem man die entsprechende App startet.