¿Cómo forzar al cliente ssh a usar solo la autenticación de contraseña?


375

Si uso pubkey auth de, por ejemplo, un Ubuntu 11.04, ¿cómo puedo configurar el cliente ssh para que use solo la autenticación de contraseña en un servidor? (solo es necesario debido a las contraseñas de prueba en un servidor, donde inicio sesión de forma predeterminada con la clave)

Encontre un camino:

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup
mv ~/.ssh/id_rsa.pub ~/.ssh/id_rsa.pub.backup

y ahora se me solicita la contraseña, pero ¿hay alguna forma oficial?

Respuestas:


579

Hace poco también necesitaba esto, y se me ocurrió esto:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no example.com

Debe asegurarse de que el cliente no esté configurado para no permitir la autenticación de contraseña.


44
Necesitaba hacer cumplir la solicitud de contraseña para que apareciera en un entorno donde se usaba Kerberos para la autenticación automatizada, y un comando similar me funcionó en esa situación específica: ssh -o GSSAPIAuthentication=no example.com
IllvilJa

21
Agradable. Solo -o PubkeyAuthentication=nofue suficiente en mi caso.
mivk

10
para usar una laptop osx de un amigo, tuve que usar: en su -o PreferredAuthentications=keyboard-interactive -o PubkeyAuthentication=no lugar
guido

44
Esto no funciona para mi. Sigue diciendo: Permiso denegado (clave pública). y nunca ofrece una solicitud de contraseña.
reinierpost

77
@reinierpost es probable porque el host ssh se ha deshabilitado PasswordAuthentication. De hecho, estoy aquí porque quería probar que deshabilitar la autenticación de contraseña funcionaba correctamente en mi host.
RubberDuck

169

He descubierto un atajo para este propósito:

ssh user:@example.com

Tenga en cuenta los dos puntos ( :) y la contraseña vacía después de él.


2
No hay documentación todavía. En realidad, he hojeado el código fuente de OpenSSH en vano (su etapa de análisis es bastante críptica y es de mañana aquí :)). Mi motivación inicial: muchos clientes solicitan una contraseña si le dan una contraseña vacía, por ejemplomysql -u user -p
Halil Özgür

43
Esto ya no parece funcionar, al menos no en mi caso. sshel cliente intentaba ciegamente claves privadas no relacionadas para autenticarse en un servidor recién instalado y seguía siendo rechazado debido a la cantidad máxima de intentos alcanzados sin siquiera solicitar la contraseña. Para forzar la autenticación de contraseña para esta primera conexión, tuve que usar la -o PreferredAuthentications=passwordsintaxis, el truco de dos puntos no tiene un efecto notable. Entonces, si bien vale la pena probar este truco, uno no debe confiar en él como un comportamiento consistente.
WhiteWinterWolf

2
@ HalilÖzgür: ¡Triste noticia, fue mucho más fácil de recordar y escribir;)!
WhiteWinterWolf

3
@Qualcuno como dijo WhiteWinterWolf, desafortunadamente ya no funciona en algunas plataformas.
Halil Özgür

2
¡Asegúrese de no tener PasswordAuthentication no en su archivo ssh_config!
Braiam

32

Además del método publicado por scoopr, puede establecer las opciones por host en el archivo de configuración del cliente ssh.

En su .sshdirectorio, cree un archivo llamado config(si aún no existe) y configure los permisos para 600, luego puede crear secciones que comiencen con

host <some hostname or pattern>

y luego establezca las opciones por host después de eso, por ejemplo,

host bob.specific.foo
user fred

host *.home.example
user billy
port 9191

para que pudieras tener

host server.to.test
PubkeyAuthentication=no

en ese archivo, y luego simplemente

ssh server.to.test

y la opción será recogida.


Gracias por esta respuesta Creé una entrada en mi ~/.ssh/configy agreguéPubkeyAuthentication no
Craig London

2
No funciona para mi
reinierpost

11

Hace poco necesité esto, pero ninguna de las opciones anteriores funcionó, ssh -vmostró que las opciones de línea de comandos pasadas a través del -ointerruptor fueron anuladas por los valores especificados en mi ~/.ssh/configarchivo.

Lo que funcionó fue esto:

ssh -F /dev/null <username>@<host>

Desde la sshpágina del manual:

 -F configfile
     Specifies an alternative per-user configuration file.  If a
     configuration file is given on the command line, the system-wide
     configuration file (/etc/ssh/ssh_config) will be ignored. The default 
     for the per-user configuration file is ~/.ssh/config.

Créditos a esta respuesta: ¿Cómo puedo hacer que ssh ignore .ssh / config?


1
Esto no responde a la pregunta. Siempre puede tener las claves almacenadas en el agente y su enfoque no impedirá que el cliente las use.
Jakuje

Hm, ¿cómo solucionaría ese problema y el que mencioné en mi respuesta?
adeelx

2
Además, si tiene las claves en una ubicación estándar (como en la pregunta), se utilizarán independientemente de si la configuración está presente o no. Iría con uno de los métodos mencionados en las primeras respuestas.
Jakuje

No es del todo cierto, acabo de probarlo en mi Lubuntu 14.04 y aunque tengo mis claves en la ubicación estándar ~/.ssh/config, las claves no se usan si lo especifico -F /dev/null. ssh -vla salida ayuda en este caso, muestra claramente que debido a que tengo una entrada general en mi configuración ssh para *, elige usar la clave pública en lugar de respetar las opciones pasadas a través del -ointerruptor como en las respuestas anteriores.
adeelx

1
La ubicación estándar es ~/.ssh/id_rsacomo se indica en la página del manual. Estas rutas están codificadas en el cliente. Solo asegúrese de proporcionar el usuario correcto cuando realice la prueba.
Jakuje

4

Intenté algunas de estas respuestas, pero ssh -vseguí mostrando que mis claves públicas se sacaban de mi directorio personal. Sin embargo, especificar un archivo de identidad falso hizo el truco para mí:

ssh -i /dev/null host

Tengo que hacer esto de forma permanente (para evitar el servidor SSH rota en un montaje en rack de APC PDU - permanecer lejos lejos de estas cosas si se preocupan por la seguridad - por lo que acabó poniendo la opción en mi archivo de configuración:

Host apc1 apc2
KexAlgorithms +diffie-hellman-group1-sha1
IdentityFile /dev/null

2

Las respuestas de @scoopr y @Halil Özgür no me funcionaron.

Esto funcionó para mí:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Fuente: http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html


13
La pregunta es sobre la autenticación del cliente por contraseña. Esta respuesta se trata de verificar si la clave de host del servidor coincide con una en hosts conocidos. En efecto, está respondiendo una pregunta diferente
Anigel

2

Y también asegúrese, no hay BatchMode=yesactivo en .ssh / config. De lo contrario, no tiene ninguna posibilidad de obtener una solicitud de contraseña interactiva.


0

Puede que sea el único en el mundo con este problema, pero tuve un sshsistema operativo de otro sistema operativo (choco ssh en Windows en un shell cygwin) visto a través dewhich ssh

Entonces la solución fue

 /usr/bin/ssh user@example.com

Tenga en cuenta la ruta completa. Hice esto después de corrercyg-get openssh

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.