¿Cómo hago para que ssh falle en lugar de solicitar una contraseña si falla la autenticación de clave pública?

107

Tengo un script que envía varios servidores usando autenticación de clave pública. Uno de los servidores ha dejado de permitir que el script inicie sesión debido a un problema de configuración, lo que significa que el script se atasca con el mensaje "Contraseña:", que obviamente no puede responder, por lo que ni siquiera prueba el resto de los servidores en la lista.

¿Hay alguna manera de decirle al cliente ssh que no solicite una contraseña si falla la autenticación de clave, sino que simplemente informe un error al conectarse y deje que mi script continúe?

rjmunro
fuente

Respuestas:

138

Para OpenSSH existe BatchMode, que además de deshabilitar la solicitud de contraseña, debe deshabilitar la consulta de frases de contraseña para las claves.

Por lotes

Si se establece en "sí", la consulta de frase de contraseña / contraseña se deshabilitará. Esta opción es útil en scripts y otros trabajos por lotes donde no hay ningún usuario presente para proporcionar la contraseña. El argumento debe ser "sí" o "no". El valor predeterminado es "no".

Uso de la muestra:

ssh -oBatchMode=yes -l <user> <host> <dostuff>
Kjetil Joergensen
fuente
Esto deshabilitó la autenticación de clave pública para mí. Sin embargo, estaba especificando como ssh user @ host -C somecommand. Lo que terminó trabajando para mí es solossh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB Carroll
20

Agregue lo siguiente a su ~/.ssh/config:

PasswordAuthentication no

y para deshabilitar la autenticación de contraseña en el servidor, agregue la misma línea /etc/ssh/sshd_configy reinicie sshd.

cas
fuente
77
si no desea deshabilitar la autenticación de contraseña para todas las conexiones de cliente ssh, también puede especificar opciones en la línea de comando. agregue '-oPasswordAuthentication = no' a su comando ssh.
cas
77
Esto no impide que se solicite la contraseña. La secuencia de comandos de OP seguirá colgando.
Joshua Swink el
11

Si está utilizando dropbear, simplemente agregue la -sopción " " para deshabilitar la autenticación de contraseña.

sybreon
fuente
44
+1 por no asumir que el cliente es openssh :-)
cas
8

En la línea de comando (o ~/.ssh/config) puede establecer PreferredAuthentications.

PreferredAuthentications=publickey
Rory
fuente
Creo que, en la línea de comando, debe ajustar la opción entre comillas y luego pasarla a la opción -o.
Craig Walker
3
@CraigWalker También puedes pasarlo como está, es decirssh -o PreferredAuthentications=publickey
Tobias Kienzler
@CraigWalker Necesita comillas si desea usar espacios para separar la opción y el valor, por ejemplossh "-oPreferredAuthentications publickey"
Timo