it-swarm-eu.dev

Kann sowohl die Authentifizierung mit privatem Schlüssel als auch mit Kennwort für die SSH-Anmeldung verwendet werden?

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?

56
chrisdotcode

In den neuesten Versionen von Fedora und RHEL 6 können Sie RequiredAuthentications2 pubkey,password, um sowohl die Kennwortauthentifizierung für pubkey als auch zu erfordern. In der Regel wird dazu ein Pubkey und ein 2-Faktor-Authentifizierungstoken benötigt, nicht das Kennwort des Benutzers.

Update: Jetzt unter RHEL/CentOS 7 und jedem System mit einer aktuellen Version von OpenSSH können Sie Folgendes verwenden:

AuthenticationMethods "publickey,password" "publickey,keyboard-interactive"

Es ist auch möglich, verwenden Sie die Match-Direktive, um IPs auszuschließen oder Benutzer.

48
mricon

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 ausgeführt.

Beides zu fordern, scheint albern und kontraproduktiv, und wenn Sie man sshd_config Überprüfen, gibt es keine Möglichkeit, dies zu tun.

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 durch das brutale Erzwingen einer extrem schwachen Passphrase), können sie trivialerweise auch jedes gespeicherte Passwort greifen/brutal erzwingen.

Wenn Sie wirklich möchten, können Sie möglicherweise etwas mit ForceCommand einrichten (z. B. nur die Authentifizierung mit öffentlichem Schlüssel zulassen und den Benutzer dann zu einer Shell weiterleiten, die zur Eingabe eines Kennworts auffordert). Ich empfehle das nicht.

Eine bessere Alternative, wenn Sie die Gefährdung begrenzen möchten, ist eine Firewall-Einrichtung, 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 etwas wie 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.

18
dr jimbob

(Crossposting SO Antwort mit aktualisierter Lösung bis heute)

Wenn Sie die Handbuchseite für sshd_config(5) durchlesen, gibt es 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,password

Diese Methode sollte auf allen aktuellen Linux-Systemen mit dem neuesten openssh (openssh-6, openssh-7) funktionieren.

Ältere Systeme

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,password
12
Jakuje

Ich habe mir das etwas genauer angesehen und mir Folgendes ausgedacht.

Sie könnten PAM für die Zwei-Faktor-Authentifizierung verwenden, aber dabei verwenden Sie keine SSH-Schlüssel, sondern zwei andere Faktoren.

Sie können beispielsweise Google mit seiner Zwei-Faktor-Authentifizierung verwenden und zur Authentifizierung pam verwenden, wie unter beschrieben

http://www.techrepublic.com/blog/opensource/two-factor-ssh-authentication-via-google-secures-linux-logins/2607

4

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 password
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication yes 
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes

Dies bedeutet, dass PAM aktiviert ist, dass jede Zeile aktiviert ist, die den Publik-Schlüssel betrifft, und dass AuthenticationMethods beide Methoden ordnungsgemäß auflistet. Bitte beachten Sie, dass Sie trotz geschrieben von Jakuje nach AuthenticationMethods kein Komma zwischen publickey und password einfügen sollten.

2