Frage

Ich würde über einen Python-Skript testen, ob eine passwordless SSH-Login eingerichtet wurde oder nicht. Wenn ich den normalen ssh Befehl ausführen, dann wird es warten, um das Passwort für gewisse Zeit zu akzeptieren. Gibt es eine Möglichkeit, wo der Befehl ssh einen Fehler zurück, sollte so bald wie ssh ein Passwort verlangt.

Ist es möglich, dies zu erreichen?

War es hilfreich?

Lösung

Der ssh-Befehl akzeptiert eine recht große Anzahl von Optionen, so vorausgesetzt, dass Ihre Python-Code-Shell-Befehle rufen wie folgt vor:

ssh -oNumberOfPasswordPrompts=0 <host> "echo hello"

Dies wird sofort fehlschlagen, wenn die Schlüssel nicht eingerichtet worden, und sofort ausgeführt werden, wenn sie haben, was der Grund für den Befehl an den Host weitergeleitet werden. Dies gibt Ihnen einen einfachen Test.

Andere Tipps

paramiko wird ein AuthenticationException erhöhen, wenn Sie nicht gefunden kein Passwort an die SSHClient der .connect() Verfahren und einen Arbeitsschlüssel übergeben.

Sie können einen Parameter auf Befehl ssh auf nur den öffentlichen Schlüssel in dem Authentifizierungsprozess versuchen und einen Batch-Modus mit einem Befehl eingestellt, dass immer true zurück, wenn der Befehl in dem Remote-Host ausgeführt wird. Mit diesem Ansatz können Sie den Exit-Code in dem var $ erfassen? und einige Entscheidung.

ssh -o PreferredAuthentications=publickey -o BatchMode=yes <host> /bin/true &> /dev/null
if [ $? -eq 0 ]; then
    #DO SOMETHING, THE CONNECTION WAS SUCCESSFUL
else
    #CONECTION DENIED
fi

Sie können benutzerdefinierte Ausgabe einer Variablen erfassen, indem die Suche nach „Zugriff verweigert“ in der ausführlichen Ausgabe des ssh-Befehl wie im folgenden Code.

PERMISION=$([ ! -z "$(ssh -v -o PreferredAuthentications=publickey -o BatchMode=yes <host> /bin/true 2>&1 | grep " Permission denied")" ] && echo "GRANTED" || echo "DENIED")
if [ $PERMISION == "GRANTED" ]; then
    #DO SOMETHING, THE CONNECTION WAS SUCCESSFUL
else
    #CONECTION DENIED
fi

Ich hoffe, dies für Sie nützlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top