Wie bringe ich ssh zum Scheitern, anstatt nach einem Kennwort zu fragen, wenn die Authentifizierung mit öffentlichem Schlüssel fehlschlägt?

107

Ich habe ein Skript, das mehrere Server mit öffentlicher Schlüsselauthentifizierung überprüft. Einer der Server hat aufgrund eines Konfigurationsproblems aufgehört, das Skript anzumelden. Dies bedeutet, dass das Skript an der Eingabeaufforderung "Password:" hängen bleibt, die es offensichtlich nicht beantworten kann, sodass der Rest der Server nicht einmal ausprobiert wird In der Liste.

Gibt es eine Möglichkeit, den ssh-Client anzuweisen, kein Kennwort einzugeben, wenn die Schlüsselauthentifizierung fehlschlägt, sondern nur einen Verbindungsfehler zu melden und mein Skript weiterlaufen zu lassen?

rjmunro
quelle

Antworten:

138

Für OpenSSH gibt es den BatchMode, der zusätzlich zur Deaktivierung der Kennwortabfrage die Abfrage von Passphrasen für Schlüssel deaktivieren sollte.

BatchMode

Bei der Einstellung „yes“ wird die Abfrage von Passphrasen / Passwörtern deaktiviert. Diese Option ist nützlich in Skripten und anderen Batch-Jobs, bei denen kein Benutzer zur Eingabe des Kennworts anwesend ist. Das Argument muss "Ja" oder "Nein" sein. Die Standardeinstellung ist "nein".

Beispielnutzung:

ssh -oBatchMode=yes -l <user> <host> <dostuff>
Kjetil Joergensen
quelle
Diese deaktivierte die Authentifizierung mit öffentlichen Schlüsseln für mich. Ich habe jedoch irgendwann ssh user @ host -C angegeben. Was für mich arbeiten muss, ist nurssh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB Carroll
20

Fügen Sie Folgendes zu Ihrem hinzu ~/.ssh/config:

PasswordAuthentication no

Fügen Sie zum Deaktivieren der Kennwortauthentifizierung auf dem Server die gleiche Zeile hinzu /etc/ssh/sshd_configund starten Sie den Computer neu sshd.

cas
quelle
7
Wenn Sie die Kennwortauthentifizierung nicht für alle SSH-Clientverbindungen deaktivieren möchten, können Sie Optionen auch in der Befehlszeile angeben. Fügen Sie Ihrem ssh-Befehl '-oPasswordAuthentication = no' hinzu.
cas
7
Dies verhindert nicht die Passwortabfrage. OPs Skript bleibt hängen.
Joshua Swink
11

Wenn Sie dropbear verwenden, fügen Sie einfach die -sOption " " hinzu, um die Kennwortauthentifizierung zu deaktivieren.

Sybreon
quelle
4
+1 für nicht vorausgesetzt, der Client ist openssh :-)
cas
8

In der Kommandozeile (oder ~/.ssh/config) können Sie einstellen PreferredAuthentications.

PreferredAuthentications=publickey
Rory
quelle
Ich denke, dass Sie in der Befehlszeile die Option in Anführungszeichen setzen und dann an die Option -o übergeben müssen.
Craig Walker
3
@CraigWalker Du kannst es auch so weitergeben, wie es ist, alsossh -o PreferredAuthentications=publickey
Tobias Kienzler
@CraigWalker Sie benötigen Anführungszeichen, wenn Sie die Option und den Wert durch Leerzeichen trennen möchten, z. B.ssh "-oPreferredAuthentications publickey"
Timo