155 votes

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

J'ai un script qui SSHes plusieurs serveurs en 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 est coincé avec une invite "Password :", à laquelle il ne peut évidemment pas répondre, de sorte qu'il n'essaie même pas le reste des serveurs de la liste.

Existe-t-il un moyen de dire au client ssh de ne pas demander un mot de passe si l'authentification de la clé échoue, mais à la place de simplement signaler une erreur de connexion et de laisser mon script continuer ?

185voto

dF. Points 29787

Pour OpenSSH, il existe BatchMode, qui, en plus de désactiver la demande de mot de passe, devrait désactiver la demande de phrase(s) de passe pour les clés.

BatchMode

Si elle est définie sur "oui", l'interrogation de la phrase de passe/mot de passe sera désactivée. Cette option est utile dans les scripts et autres travaux par lots où aucun utilisateur n'est présent pour fournir le mot de passe. L'argument doit être "yes" ou "no". La valeur par défaut est "no".

Exemple d'utilisation :

ssh -oBatchMode=yes -l <user> <host> <dostuff>

3 votes

Cela a désactivé l'authentification par clé publique pour moi. Je spécifiais pourtant comme ssh user@host -C quelque chose. Ce qui a fini par fonctionner pour moi est juste ssh user@host -oPreferredAuthentications=publickey -C 'echo success'

49voto

cas Points 6563
  • Pour désactiver l'authentification par mot de passe pour la tentative de connexion ssh en cours, passez cette option sur la ligne de commande :

    -o PasswordAuthentication=no
  • Pour désactiver l'authentification par mot de passe pour toutes les futures connexions à un hôte quelconque, ajoutez les éléments suivants à votre fichier de configuration ~/.ssh/config :

    PasswordAuthentication no
  • Pour le désactiver pour certains hôtes seulement, ajoutez ce qui suit à ~/.ssh/config :

    Host host1 host2 host3...
        PasswordAuthentication no

Les options ci-dessus s'appliquent à sortant les connexions ssh, c'est-à-dire lorsque vous essayez de vous connecter à un serveur ssh distant.

Pour désactiver l'authentification par mot de passe sur un serveur ssh (c'est-à-dire qu'elle s'applique à tous les serveurs ssh). entrant connexions ssh), ajoutez PasswordAuthentication no a /etc/ssh/sshd_config et redémarrer sshd .

8 votes

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.

10 votes

Cela n'empêche pas l'invite du mot de passe. Le script du PO sera toujours bloqué.

2 votes

@JoshuaSwink : Oui, c'est le cas. Je viens de l'essayer (sur la ligne de commande en tant que -oPasswordAuthentication=no . Vous obtenez une erreur du type Permission denied (publickey,password). et il sort immédiatement.

12voto

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

4 votes

+1 pour ne pas avoir supposé que le client est openssh :-)

9voto

mblsha Points 305

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

PreferredAuthentications=publickey

0 votes

Je pense que, sur la ligne de commande, vous devez mettre l'option entre guillemets et la passer à l'option -o.

5 votes

@CraigWalker Vous pouvez aussi le passer tel quel, c'est-à-dire ssh -o PreferredAuthentications=publickey

0 votes

@CraigWalker Vous avez besoin de guillemets si vous souhaitez utiliser des espaces pour séparer l'option et la valeur, par exemple. ssh "-oPreferredAuthentications publickey"

2voto

Sandip S Points 121

Voici un exemple de sftp bash script snippet. J'utilise "-o BatchMode=Yes" pour désactiver l'invite de mot de passe en cas d'échec. Et vérifier le code de retour frp pour vérifier si la connexion ftp a échoué.

sftp -o "IdentityFile=<YOUR_IDENTTIY_FILE>"  -o "BatchMode=Yes" userName@ftpserver.com <<EOF

cd /$remotepath
mget *.csv $localpath/download

quit
EOF
exit_code=$?
if [[ $exit_code != 0 ]]; then
   echo "sftp error, failed to connect to ftp server" >&2
   exit 1
fi

1 votes

Je voulais juste ajouter que BatchMode réglé sur yes est ce qui désactive l'authentification interactive (c'est-à-dire l'invite de mot de passe).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X