SSH: Wie finden wir einen Mechanismus zur Benutzerauthentifizierung, der zur Laufzeit in sshd config verwendet wird?

315
Quick Learner

Ich möchte die sshd_config-Datei so ändern, dass ein Skript ausgeführt wird, wenn der Benutzer ssh mit Kennwort eingegeben wird, und ein anderes Skript, wenn der Benutzer ssh auf dem Server mit einem signierten SSH-Zertifikat läuft. Ich sehe, dies ist möglicherweise mit der Kombination von Match und ForceCommand möglich, aber es fällt mir schwer, herauszufinden, ob der Benutzer PasswordAuthentication für den Zugriff oder SSH Cert für den Server verwendet.

Für Ex etwa wie folgt:

Übereinstimmung (Wenn der Benutzer das Kennwort verwendet hat) ForceCommand / usr / sbin / passwordscript

Übereinstimmung (Wenn der Benutzer pubkey verwendet hat) ForceCommand / usr / sbin / pubkeyscript

Übereinstimmung (Wenn der Benutzer TrustedUserCAKeys (?) Verwendet hat) ForceCommand / usr / sbin / sshcertdscript

Gibt es eine Möglichkeit, herauszufinden, wie der Benutzer versucht, SSH in den Server einzugeben, ob es ein Kennwort, ein öffentlicher Schlüssel oder TrustedUserCAKeys (SSH Cert) ist?

Danke im Voraus..

1

1 Antwort auf die Frage

1
Martin Prikryl

In authorized_keysDatei können Sie einen Befehl angeben, der bei der Authentifizierung mit einem bestimmten Schlüsselpaar verwendet werden soll. Sie können eine Umgebungsvariable auch mit der environmentOption festlegen :

command="/path/script",command="KEY_WAS_USED=yes" ssh-rsa ... 

Und dann können Sie das Vorhandensein der Variablen in einem Startskript überprüfen, um Ihr "Nicht-Schlüssel" -Skript (Kennwort) auszuführen.

Danke Martin .. Es könnte eine Chance geben, wenn der Benutzer die Umgebungsvariable einrichtet, um die Ausführung eines bestimmten Skripts zu vermeiden. Zum Beispiel: Wenn ich MFA im Passwort-Anwendungsfall haben möchte, aber nicht im Schlüssel-Use-Case, dann "könnte" der Benutzer diese Umgebungsvariable KEY_WAS_USED = yes setzen und wir könnten diesen Wert auch für den Passwort-Anwendungsfall sehen. Das könnte möglich sein. Hab ich recht? Nur um es kurios zu machen, gibt es keine Möglichkeit, dass wir zur Laufzeit in der Datei sshd_config wissen können? Quick Learner vor 5 Jahren 0
Mir ist bewusst, dass dies keine perfekte Lösung ist, aber ich weiß es nicht besser. Martin Prikryl vor 5 Jahren 0