Es scheint, dass sie sich gegenseitig ausschließen, da das Deaktivieren des einen das andere gibt und umgekehrt. Die Zwei-Faktor-Authentifizierung für meine SSH-Server klingt wirklich gut. Gibt es also eine Möglichkeit, dies zu erreichen?
Es scheint, dass sie sich gegenseitig ausschließen, da das Deaktivieren des einen das andere gibt und umgekehrt. Die Zwei-Faktor-Authentifizierung für meine SSH-Server klingt wirklich gut. Gibt es also eine Möglichkeit, dies zu erreichen?
In den neuesten Versionen von Fedora und RHEL 6 können Sie RequiredAuthentications2 pubkey, password
verwenden, um sowohl die pubkey als auch die Passwortauthentifizierung zu erfordern. In der Regel wird hierfür ein Pubkey- und 2-Faktor-Authentifizierungstoken benötigt, nicht das Kennwort des Benutzers.
Update: Unter RHEL / CentOS 7 und jedem System mit einer neueren Version von OpenSSH können Sie Folgendes verwenden:
Authentifizierungsmethoden "publickey, password" "publickey, tastaturinteraktiv"
Es ist auch möglich, die Match-Direktive zu verwenden, um IPs auszuschließen oder Benutzer.
Sie können sowohl die Authentifizierung mit öffentlichem Schlüssel als auch mit Kennwort auf demselben Server durchführen. Wenn die Authentifizierung mit öffentlichem Schlüssel fehlschlägt, wird die Kennwortauthentifizierung durchgeführt.
Beides zu fordern, erscheint albern und kontraproduktiv, und das Überprüfen von man sshd_config
gibt es keine Option Tun Sie dies.
Ihr privater SSH-Schlüssel sollte eine sichere Passphrase haben. Wenn ein Angreifer Ihren privaten Schlüssel erhält, kann er dennoch nichts tun, ohne zuvor Ihre Passphrase erhalten zu haben. Wenn sie diese Passphrase kompromittiert haben (höchstwahrscheinlich mit einem Keylogger oder weil sie eine extrem schwache Passphrase brutal erzwingen), können sie trivialerweise auch jedes gespeicherte Passwort greifen / brutal erzwingen.
Wenn Sie wirklich wollen, könnten Sie es möglicherweise Richten Sie etwas mit beispielsweise ForceCommand ein (z. B. erlauben Sie nur die Authentifizierung mit öffentlichem Schlüssel und leiten Sie den Benutzer dann zu einer Shell, die zur Eingabe eines Kennworts auffordert). Ich empfehle dies nicht.
Eine bessere Alternative, wenn Sie die Gefährdung begrenzen möchten, besteht darin, eine Firewall einzurichten, um IPs zu begrenzen, die den SSH-Port erreichen können. Möglicherweise mit einem zusätzlichen VPN, das irgendwo auf einem Server ausgeführt wird, wenn Sie irgendwann von einem anderen Computer aus tunneln müssen. Sie können auch knockd verwenden, um nach einem bestimmten Port-Klopfmuster ein Loch in einer Firewall zu öffnen. Beachten Sie jedoch, dass jeder, der den Datenverkehr abhört, das Klopfmuster erneut abspielen kann, um einen Port zu öffnen. P. >
(Cross-Posting SO-Antwort mit aktualisierter Lösung bis heute)
Wenn Sie die Handbuchseite für sshd_config (5)
dort lesen ist die Option AuthenticationMethods
, die die Liste der Methoden enthält, die Sie übergeben müssen, bevor Sie Zugriff erhalten. Ihr erforderliches Setup ist:
AuthenticationMethods publickey, Kennwort
Diese Methode sollte auf allen aktuellen Linux-Systemen mit dem neuesten openssh (openssh-6, openssh-7) funktionieren ).
Die einzige mir bekannte Ausnahme ist RHEL 6 (openssh-5.3), bei der unterschiedliche Optionen mit denselben Werten festgelegt werden müssen (wie in der anderen Antwort beschrieben):
RequiredAuthentications2 publickey, Passwort
Ich habe mich etwas genauer damit befasst und mir Folgendes ausgedacht.
Sie könnten PAM für die Zwei-Faktor-Authentifizierung verwenden, aber dabei werden Sie keine SSH-Schlüssel verwenden, sondern einen verschiedene zwei Faktoren.
Sie können beispielsweise Google mit seiner Zwei-Faktor-Authentifizierung verwenden und pam zur Authentifizierung verwenden, wie unter
Die einzige Lösung, die für mich funktioniert hat, ist das Folgende in der Datei / etc / ssh / sshd_config (getestet mit einem CentOS7):
PubkeyAuthentication yes AuthenticationMethods publickey passwordAuthorizedKeysFile .ssh / autorisierte_keysPasswordAuthentication yes PermitEmptyPasswords noChallengeResponseAuthentication noUsePAM yes
Dies bedeutet, dass PAM aktiviert ist, dass jede Zeile, die den Publik-Schlüssel betrifft, aktiviert ist und dass AuthenticationMethods schließlich beide Methoden ordnungsgemäß auflistet Wurde von Jakuje geschrieben, sollten Sie nach AuthenticationMethods kein Komma zwischen publickey und password einfügen.