Comment faire en sorte que ssh échoue plutôt que de demander un mot de passe si l'authentification par clé publique échoue?

107

J'ai un script qui ssh'es plusieurs serveurs utilisant l'authentification par clé publique. L'un des serveurs a cessé de laisser le script se connecter en raison d'un problème de configuration, ce qui signifie que le script reste bloqué avec une invite "Mot de passe:", à laquelle il ne peut évidemment pas répondre, de sorte qu'il n'essaye même pas le reste des serveurs. dans la liste.

Existe-t-il un moyen de dire au client ssh de ne pas demander de mot de passe en cas d'échec de l'authentification de la clé, mais simplement de signaler une erreur de connexion et de laisser mon script se poursuivre?

Rjmunro
la source

Réponses:

138

Pour OpenSSH, il existe BatchMode, qui, en plus de désactiver l’invite de saisie du mot de passe, doit désactiver l’interrogation du mot de passe composé pour la clé.

Temps différé

Si la valeur est «yes», la requête phrase de passe / mot de passe sera désactivée. Cette option est utile dans les scripts et autres travaux par lots dans lesquels aucun utilisateur n'est présent pour fournir le mot de passe. L'argument doit être «oui» ou «non». La valeur par défaut est "non".

Exemple d'utilisation:

ssh -oBatchMode=yes -l <user> <host> <dostuff>
Kjetil Joergensen
la source
Cette authentification par clé publique désactivée pour moi. Je spécifiais cependant comme utilisateur ssh @ host -Costecommand. Ce qui me permet de travailler, c’est justessh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB Carroll
20

Ajoutez ce qui suit à votre ~/.ssh/config:

PasswordAuthentication no

et pour désactiver l'authentification par mot de passe sur le serveur, ajoutez la même ligne à /etc/ssh/sshd_configet redémarrez sshd.

cas
la source
7
Si vous ne souhaitez pas désactiver l'authentification par mot de passe pour toutes les connexions du client ssh, vous pouvez également spécifier des options sur la ligne de commande. ajoutez '-oPasswordAuthentication = no' à votre commande ssh.
cas le
7
Cela n'empêche pas l'invite de mot de passe. Le script d'OP sera toujours bloqué.
Joshua Swink
11

Si vous utilisez dropbear, ajoutez simplement l’ -soption " " pour désactiver l’authentification par mot de passe.

sybreon
la source
4
+1 pour ne pas supposer que le client est openssh :-)
cas le
8

Sur la ligne de commande (ou ~/.ssh/config) vous pouvez définir PreferredAuthentications.

PreferredAuthentications=publickey
Rory
la source
Je pense que, sur la ligne de commande, vous devez envelopper l'option entre guillemets, puis la passer à l'option -o.
Craig Walker
3
@CraigWalker Vous pouvez également le transmettre tel quel, c'estssh -o PreferredAuthentications=publickey
Tobias Kienzler
@CraigWalker Vous avez besoin de guillemets si vous souhaitez utiliser des espaces pour séparer l'option et la valeur, par exemplessh "-oPreferredAuthentications publickey"
Timo