Überprüfen Sie, ob passwordless Zugriff hat eingerichtet worden
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?
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.