Dieses Tutorial zeigt Ihnen, wie Sie die SSH-Zwei-Faktor-Authentifizierung auf einem Ubuntu-Server mit dem bekannten Google Authenticator einrichten. Es wird die Sicherheit des SSH-Dienstes auf Ihrem Ubuntu-Server erheblich verbessern.
Wie die Zwei-Faktor-Authentifizierung funktioniert
Normalerweise müssen Sie nur ein Passwort eingeben oder den SSH-Schlüssel verwenden, um sich remote bei Ihrem Ubuntu-Server anzumelden. Bei der Zwei-Faktor-Authentifizierung (2FA) müssen Sie zwei Informationen eingeben, um sich anzumelden. Sie müssen also auch ein zeitbasiertes Einmalpasswort eingeben, um sich bei Ihrem SSH-Server anzumelden. Dieses Einmalpasswort wird mit dem TOTP-Algorithmus berechnet, der ein IETF-Standard ist. Heutzutage bieten viele Websites und Dienste (Facebook, Google, Twitter usw.) 2FA für Benutzer an, um ihre Konten zu sichern, und es ist eine gute Idee, 2FA auch auf Ihrem SSH-Server zu aktivieren.
Dieses Tutorial zeigt Ihnen, wie Sie
einrichten- Passwortauthentifizierung mit 2FA
- Public-Key-Authentifizierung mit 2FA
Hinweis :Die Open-Source-Serversoftware, die wir in diesem Artikel verwenden, heißt libpam-google-authenticator
, das aus dem Standard-Ubuntu-Repository installiert wird. Das Unternehmen Google beteiligt sich in keiner Weise am Authentifizierungsprozess. Die Serversoftware und die mobile App benötigen keinen Netzwerkzugriff.
Schritt 1:Google Authenticator auf Ubuntu-Server installieren und konfigurieren
Melden Sie sich bei Ihrem Ubuntu-Server an und führen Sie den folgenden Befehl aus, um Google Authenticator aus dem standardmäßigen Ubuntu-Paket-Repository zu installieren.
sudo apt install -y libpam-google-authenticator
Führen Sie dann den google-authenticator
aus Befehl zum Erstellen eines neuen geheimen Schlüssels in Ihrem Home-Verzeichnis.
google-authenticator
Auf die Frage „Möchten Sie, dass Authentifizierungstoken zeitbasiert sind?“ Antworten Sie mit y .
Dann sehen Sie einen QR-Code, den Sie mit einer TOTP-App auf Ihrem Telefon scannen können. Es gibt zwei Apps, die ich empfehle:
- Google Authenticator ist die bekannteste mobile TOTP-App. Sie können es über Google Play oder den Apple App Store auf Ihrem Mobiltelefon installieren.
- Der Google Authenticator Die mobile App ist nicht Open Source. Wenn Sie Google nicht vertrauen, können Sie FreeOTP verwenden, eine mobile Open-Source-TOTP-App, die von Red Hat entwickelt wurde.
Scannen Sie den QR-Code mit Google Authenticator oder FreeOTP auf Ihrem Mobiltelefon. Beachten Sie, dass Sie das Terminalfenster vergrößern müssen, um den vollständigen QR-Code zu scannen.
Der QR-Code stellt den geheimen Schlüssel dar, der nur Ihrem SSH-Server und Ihrer mobilen TOTP-App bekannt ist. Sobald der QR-Code gescannt wurde, können Sie ein sechsstelliges Einmalpasswort auf Ihrem Telefon sehen. Standardmäßig ändert es sich alle 30 Sekunden. Sie müssen dieses einmalige Passwort später eingeben, um sich über SSH beim Ubuntu-Server anzumelden.
Im Terminalfenster können Sie den geheimen Schlüssel, den Bestätigungscode und den Notfall-Rubbelcode sehen. Es wird empfohlen, diese Informationen zur späteren Verwendung an einem sicheren Ort zu speichern.
Dann können Sie y eingeben um alle verbleibenden Fragen zu beantworten. Dadurch wird Ihre Google Authenticator-Konfigurationsdatei aktualisiert, die mehrfache Verwendung desselben Authentifizierungstokens deaktiviert, das Zeitfenster vergrößert und die Ratenbegrenzung zum Schutz vor Brute-Force-Anmeldeversuchen aktiviert.
Schritt 2:SSH-Daemon für die Verwendung von Google Authenticator konfigurieren
- Passwortauthentifizierung mit 2FA
- Public-Key-Authentifizierung mit 2FA
Passwortauthentifizierung mit 2FA
Wenn Sie keinen SSH-Schlüssel verwenden, befolgen Sie die nachstehenden Anweisungen.
Öffnen Sie die Konfigurationsdatei des SSH-Servers.
sudo nano /etc/ssh/sshd_config
Suchen Sie die folgenden beiden Parameter in der Datei und vergewissern Sie sich, dass beide auf yes gesetzt sind .
UsePAM yes ChallengeResponseAuthentication yes
PAM steht für Pluggable Authentication Module. Es bietet eine einfache Möglichkeit, verschiedene Authentifizierungsmethoden in Ihr Linux-System einzubinden. Um Google Authenticator mit SSH zu aktivieren, müssen PAM und Challenge-Response-Authentifizierung aktiviert sein.
Wenn Sie dem Root-Benutzer erlauben möchten, 2FA zu verwenden, suchen Sie nach PermitRootLogin
Parameter und setzen Sie seinen Wert auf yes
. Es darf nicht PermitRootLogin no
sein oder PermitRootLogin prohibit-password
.
PermitRootLogin yes
Speichern und schließen Sie die Datei. Bearbeiten Sie als Nächstes die PAM-Regeldatei für den SSH-Daemon.
sudo nano /etc/pam.d/sshd
Am Anfang dieser Datei sehen Sie die folgende Zeile, die die Passwort-Authentifizierung bei ChallengeResponseAuthentication
aktiviert auf yes
gesetzt ist .
@include common-auth
Um 2FA in SSH zu aktivieren, fügen Sie die folgenden zwei Zeilen hinzu.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Speichern und schließen Sie die Datei. Starten Sie dann den SSH-Daemon neu, damit die Änderung wirksam wird.
sudo systemctl restart ssh
Von nun an verlangt der SSH-Daemon die Eingabe des Benutzerpassworts und eines Bestätigungscodes (das von Google Authenticator generierte Einmalpasswort). Der folgende Screenshot zeigt eine SSH-Anmeldesitzung von einer CentOS-Box zu einem Ubuntu 20.04-Server.
Public-Key-Authentifizierung mit 2FA
Wenn Sie den SSH-Schlüssel verwenden, um sich beim SSH-Server anzumelden, befolgen Sie die nachstehenden Anweisungen.
Öffnen Sie die Konfigurationsdatei des SSH-Servers.
sudo nano /etc/ssh/sshd_config
Suchen Sie die folgenden beiden Parameter in der Datei und vergewissern Sie sich, dass beide auf yes gesetzt sind .
UsePAM yes ChallengeResponseAuthentication yes
PAM steht für Pluggable Authentication Module. Es bietet eine einfache Möglichkeit, verschiedene Authentifizierungsmethoden in Ihr Linux-System einzubinden. Um Google Authenticator mit SSH zu aktivieren, müssen PAM und Challenge-Response-Authentifizierung aktiviert sein.
Wenn Sie dem Root-Benutzer erlauben möchten, 2FA zu verwenden, suchen Sie nach PermitRootLogin
Parameter und setzen Sie seinen Wert auf yes
. Es darf nicht PermitRootLogin no
sein oder PermitRootLogin prohibit-password
.
PermitRootLogin yes
Fügen Sie als Nächstes die folgende Zeile am Ende dieser Datei hinzu. Dies teilt dem SSH-Daemon mit, dass der Benutzer sowohl die Public-Key-Authentifizierung als auch die Challenge-Response-Authentifizierung bestehen muss.
AuthenticationMethods publickey,keyboard-interactive
Speichern und schließen Sie die Datei. Bearbeiten Sie als Nächstes die PAM-Regeldatei für den SSH-Daemon.
sudo nano /etc/pam.d/sshd
Am Anfang dieser Datei sehen Sie die folgende Zeile, die die Passwort-Authentifizierung bei ChallengeResponseAuthentication
aktiviert auf yes
gesetzt ist . Wir müssen diese Zeile auskommentieren, da wir den SSH-Schlüssel anstelle des Passworts verwenden werden.
@include common-auth
Um 2FA in SSH zu aktivieren, fügen Sie die folgenden zwei Zeilen hinzu.
# two-factor authentication via Google Authenticator auth required pam_google_authenticator.so
Speichern und schließen Sie die Datei. Starten Sie dann den SSH-Daemon neu, damit die Änderung wirksam wird.
sudo systemctl restart ssh
Von nun an müssen Sie sich mit dem SSH-Schlüssel und dem Google Authenticator-Bestätigungscode anmelden.
Notizen
- Jeder Benutzer auf Ihrem Ubuntu-Server muss
google-authenticator
ausführen Befehl eingeben und QR-Code scannen, um die Zwei-Faktor-Authentifizierung zu verwenden. Wenn der Benutzer die Einrichtung nicht vorgenommen hat und versucht, sich anzumelden, wird die Fehlermeldung „Berechtigung verweigert (Tastatur-interaktiv) “ wird angezeigt. - Notfall-Scratch-Code ist Ihr Backup-Code. Wenn Sie Ihr Telefon verlieren, können Sie anstelle eines Einmalpassworts einen von fünf Notfall-Rubbelcodes eingeben, um die zweistufige Verifizierung abzuschließen. Diese Codes sind nur zur einmaligen Verwendung bestimmt.
- Wenn Sie den geheimen Schlüssel ändern möchten, melden Sie sich einfach bei Ihrem Server an und führen Sie
google-authenticator
aus Befehl erneut, um den~/.google_authenticator
zu aktualisieren Datei. - Da das einmalige Passwort anhand des gemeinsamen geheimen Schlüssels und der aktuellen Uhrzeit berechnet wird, ist es eine gute Idee, die NTP-Zeitsynchronisierung auf Ihrem Ubuntu-Server zu aktivieren, um die genaue Zeit beizubehalten, obwohl wir zuvor eine Zeitverschiebung von 4 Minuten zugelassen haben zwischen dem Ubuntu-Server und der mobilen App. Ihr Ubuntu-Server und die mobile TOTP-App können unterschiedliche Zeitzonen verwenden.
So deaktivieren Sie die SSH-Zwei-Faktor-Authentifizierung
Bearbeiten Sie die PAM-Regeldatei für den SSH-Daemon.
sudo nano /etc/pam.d/sshd
Kommentieren Sie die folgende Zeile aus.
auth required pam_google_authenticator.so
Speichern und schließen Sie die Datei. Wenn Sie die folgende Zeile in /etc/ssh/sshd_config
hinzugefügt haben Datei,
AuthenticationMethods publickey,keyboard-interactive
Entfernen Sie das keyboard-interactive
Authentifizierungsmethode.
AuthenticationMethods publickey
Speichern und schließen Sie die Datei. Starten Sie dann den SSH-Daemon neu.
sudo systemctl restart ssh