Ich verwende Ubuntu 14.04.1 (mit OpenSSH 6.6 und libpam-google-authenticator 20130529-2).
Ich versuche, SSH-Anmeldungen einzurichten, bei denen sich der öffentliche Schlüssel authentifiziert (ohne Kennwort) und ein Benutzer aufgefordert wird, einen Code vom Google-Authentifikator einzugeben.
Durch das Befolgen / Anpassen dieser Anweisungen erhalte ich eine Aufforderung zur Passworteingabe sowie eine Aufforderung zur Google-Authentifizierung:
- https://scottlinux.com/2013/06/02/use-google-authenticator-for-two-factor-ssh-authentication-in-linux/
- http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/
- https://wiki.archlinux.org/index.php/Google_Authenticator und https://wiki.archlinux.org/index.php/SSH_keys#Two-factor_authentication_and_public_keys
- https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-two-factor-authentication
Ich habe das Paket installiert, meine /etc/ssh/sshd_config
und /etc/pam.d/ssh
Dateien bearbeitet
In /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
und am unteren Rand von /etc/pam.d/ssh
:
auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")
Ich weiß, dass PAM auftragsabhängig ist, aber sshd_config
auch?
Was mache ich falsch? Jede Hilfe wäre dankbar.
PasswordAuthentication no
, aber das war es nicht. Das Problem ist / war, dass ich / habeControlMaster auto
undControlPath
Anweisungen in meiner ~ / .ssh / config-Datei. Ich wollte sicherstellen, dass ich mich nicht aussperre, damit ich immer eine SSH-Sitzung offen lasse. Da mein Computer sie nur wiederverwendete, stieg ich immer ein, ohne dass das System nach einem Token fragte. Ich habe Ihre Antwort als richtig markiert, da jemand, der sie befolgt, tatsächlich ein funktionierendes Setup erhalten würde. Vielen Dank!PasswordAuthentication no
,ChallengeResponseAuthentication yes
,AuthenticationMethods publickey,keyboard-interactive
, undUsePAM yes
insshd_config
. Es überprüft meinen Schlüssel und fragt mich dann nach meinem Google Authenticator-Token und fragt mich dann auch nach meinem Passwort. Ich mache alle drei - kann keinen von ihnen überspringen. Ich habe es auch versucht,AuthenticationMethods publickey,keyboard-interactive:pam
wie in der Manpage vorgeschlagen, aber das hat nichts geändert. Irgendwelche Ideen?@include common-auth
Linie auszeichnen musste, die die Antworten zeigt.pam_google_authenticator
Anfangs dachte ich nur, es wäre ein Kommentar für die Zeile in /etc/pam.d/sshd.auth substack password-auth
), aber Ihr Kommentar hat mein Problem gelöst!Ich war endlich in der Lage, dies zum Laufen zu bringen, indem ich
auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok
oben auf platzierte/etc/pam.d/sshd
.Laut der pam.d-Manpage :
success=done
Wenn sich Google Authenticator abmeldet, wird keine weitere Authentifizierung durchgeführt, was bedeutet, dass keine zusätzliche Passwortabfrage erfolgt.default=die
Wenn Google Authenticator den Anmeldeversuch ablehnt, schlägt die Authentifizierung sofort fehl und die Passwortabfrage wird übersprungen.Es
[success=done new_authtok_reqd=done default=die]
ist also eine Art Mischung zwischen den Wertensufficient
und denrequisite
Kontrollwerten, da wir Verhalten von beiden wollen: Bei Erfolg sofort beenden (ausreichend) und bei Misserfolg auch sofort beenden (erforderlich).Beachten Sie, dass das
nullok
Argument für pam_google_authenticator.so bedeutet, dass die~/.google_authenticator
Authentifizierung mit öffentlichem Schlüssel normal fortgesetzt wird, wenn eine Datei für einen Benutzer nicht gefunden wird. Dies ist nützlich, wenn ich nur einen Teil meiner Konten bei 2FA sperren möchte.quelle
Die Antwort von Linus Kendall sollte auf älteren Systemen funktionieren, aber auf neueren Linux-Computern ist sie problematisch. auf meinem arch linux-basierten webserver führt diese konfiguration dazu, dass pam nach erhalt meines ssh-schlüssels nach meinem authentifizierungscode und meinem passwort fragt (dh ich brauche alle 3).
Eine einfachere Lösung, die dieses Problem verhindert und auf jedem System funktionieren sollte, besteht darin, den Eintrag in
/etc/pam.d/sshd
zu ändern :Und um dann die gleichen Änderungen an `` / etc / ssh / sshd` vorzunehmen, die Linus erwähnt hat:
Das sollte Sie nach Ihrem Authentifizierungstoken fragen, nachdem der Server Ihren öffentlichen Schlüssel akzeptiert hat. Es sollte nicht nach Ihrem Passwort fragen.
Nebenbei bemerkt, wenn Sie ein SFTP-Benutzerkonto haben möchten, müssen Sie wahrscheinlich den Google-Authentifikator umgehen, damit es funktioniert. Hier ist ein Vorschlag, wie dies mit einem SFTP-Jail sicher gemacht werden kann. In
etc/ssh/sshd_config
:Sie müssen die Berechtigungen für / path / to / ftp / dir root Schreib nur (zB machen
chown root:root /path/to/ftp/dir
,chmod 755 /path/to/ftp/dir
. Alle Eltern über das Verzeichnis auch sichere Berechtigungen benötigen. So wie ich dies in der Regel tun , ist durch die chroot - Verzeichnis zu machen/home/shared/user
, eine Erstellung Verzeichnis dort hinein (zB 'Daten') und dann das Verzeichnis einhängen, das ich teilen möchte, wie folgt:sudo mount -o bind /path/to/ftp/dir /home/shared/user/data
Wenn Sie alle diese Schritte ausführen, verfügen Sie über einen öffentlichen Schlüssel + eine Google-Authentifizierung für Ihre SSH-Benutzer sowie ein funktionsfähiges passwortgeschütztes SFTP-Konto für die Datenübertragung.
quelle