ssh nunca pide una contraseña

14

De alguna manera, mi SSH nunca quiere pedirme una contraseña.

Así que configuré un VPS en algún servidor aleatorio en algún lugar del mundo y quiero conectarme a él con ssh.

Puedo configurar una clave, pero cuando hago esto:

ssh -l some-user IP

Me sale el error:

Received disconnect from ##.##.##.##: 2: Too many authentication failures for some-user

Cuando miro los detalles, puedo ver que la contraseña es una de las opciones:

debug1: Offering RSA public key: some-user@computer
debug1: Authentications that can continue: publickey,password

Sin embargo, SSH nunca me pide la contraseña. Intenta 5 veces con lo que sospecho que es el método publickey y luego falla. ¿Por qué ssh no intenta con la contraseña?

Por si acaso, mi archivo ssh_config tiene:

PasswordAuthentication yes

Registro completo

ssh -v -l root ##.##.##.##
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /home/someuser/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to ##.##.##.## [##.##.##.##] port 22.
debug1: Connection established.
debug1: identity file /home/someuser/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/someuser/.ssh/id_rsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_dsa type -1
debug1: identity file /home/someuser/.ssh/id_dsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2p2 Ubuntu-6
debug1: match: OpenSSH_6.2p2 Ubuntu-6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1p1 Debian-4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA XX:XX:...:XX:XX
debug1: Host '##.##.##.##' is known and matches the ECDSA host key.
debug1: Found key in /home/someuser/.ssh/known_hosts:38
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/someuser/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
Received disconnect from ##.##.##.##: 2: Too many authentication failures for root
Alexis Wilke
fuente

Respuestas:

17

Intente iniciar sesión con la autenticación de clave pública deshabilitada, utilizando

ssh -o PubkeyAuthentication=no root@newserver
Klaus-Dieter Warzecha
fuente
¡Bueno! ¡Eso funciono! Intenté lo "opuesto" sin éxito ... (es decir -o PasswordAuthentication=yes). Pero esto es lo que estaba buscando.
Alexis Wilke
3
@AlexisWilke ¡Me alegra que funcione! Pero por favor lea la respuesta de Olli también. Él definitivamente tiene razón en que todavía hay algo mal con usted .ssh/config. El -o PubkeyAuthentication=nono es agradable como una solución permanente.
Klaus-Dieter Warzecha
Este truco (-o PubkeyAuthentication = no) funcionó bien en una máquina con varios archivos de identidad.
Valerio Schiavoni
17

Lo más probable es que tenga más de una identityfilelínea en su .ssh/configarchivo.

Incluso si tiene identityfilebajo hostconfiguración, se aplica globalmente. Lo que eso significa es que sshintenta cada archivo de identidad (es decir, clave pública) en cada host, antes de solicitar una solicitud de contraseña del servidor.

Puedes arreglar esto por

  1. Eliminar todas las identityfilelíneas menos una , o
  2. Agregando PubkeyAuthentication noa .ssh/config, o
  3. Ejecutando ssh con -o PubkeyAuthentication=noparámetro.

De man 5 ssh_config:

PubkeyAuthentication
    Specifies whether to try public key authentication.  The argument to this
    keyword must be “yes” or “no”.  The default is “yes”.  This option applies 
    to protocol version 2 only.

IdentityFile
    ...
    It is possible to have multiple identity files specified in configuration
    files; all these identities will be tried in sequence.  Multiple 
    IdentityFile directives will add to the list of identities tried (this 
    behaviour differs from that of other configuration directives).

Algunas instrucciones generales con claves públicas:

  1. En general, debe tener solo una clave privada por cliente (estación de trabajo) y colocar la clave pública correspondiente a todos los servidores a los que el cliente debe tener acceso. En otras palabras, comparta la clave pública entre servidores y nunca use la misma clave privada en varios dispositivos.
  2. Siempre genere un par de claves en su dispositivo y transmita solo la clave pública. De esa manera, incluso si el servidor se ve comprometido, su clave privada sigue siendo segura y protegida. Esto podría suceder de formas sorprendentes, por ejemplo, a través de copias de seguridad.
  3. Si otra persona administra el servidor, se debe proporcionar una clave pública para ellos; deberían no generar el par de claves y envía la clave privada en su caso. De esa manera, no pueden hacerse pasar por usted con su clave (por supuesto, generalmente pueden hacer lo que quieran). Además, con la clave pública, solo se debe proteger la integridad (es decir, alguien no cambió la clave pública); con clave privada, la confidencialidad (es decir, nadie más obtuvo la clave) debe conservarse, y no es posible estar absolutamente seguro de que no se vio comprometida.
  4. Comprometer a un servidor no compromete a otros servidores, incluso si usa la misma clave privada para conectarse a múltiples servidores (excepto si transmitió esa clave privada al servidor. Nunca haga eso).
  5. Comprometer su estación de trabajo expondrá sus claves privadas de todos modos. Tener varias claves privadas no ayuda con esto (excepto si tiene frases de contraseña diferentes y fuertes, y no todas están disponibles para el atacante).

Hay algunas excepciones a esto, pero no demasiadas.

Olli
fuente
2
Aaah! Tengo "demasiados" archivos de identificación y comprueba con 5 de ellos y se detiene. ¡Entendido! Eso lo explica todo. Supongo que debería moverlos a todos en una subcarpeta para que no se encuentren automáticamente y la función de contraseña vuelva a funcionar automáticamente ...
Alexis Wilke
3
Si es posible, debe / podría usar solo una clave pública para cada servicio que necesite. Muy raramente hay una razón para hacerlo de otra manera. Si alguien roba su clave pública (contenido de authorized_keys), no puede hacer nada con ella. Y si todas sus claves privadas ( id_rsa/ id_dsa) están en la misma computadora de todos modos, usar más de una no importa.
Olli
4

Su ssh local no debería estar pidiéndole una contraseña, el servidor ssh en el otro extremo debería. Es probable que el servidor esté configurado para no aceptar la autenticación de contraseña. El mío tampoco te pediría una contraseña.

Bagazo
fuente
1
El otro servidor es un servidor nuevo y le dicen que haga exactamente eso. ¡No solo eso, mi compañero podría iniciar sesión sin problemas! Hay algo sospechoso en mi computadora que evita que pruebe la contraseña ... En realidad, si observa los registros, la autenticación autorizada INCLUYE "contraseña". Por lo tanto, mi cliente ssh local DEBE pedirme la contraseña, pero decide omitirla.
Alexis Wilke
Es más fácil ver por qué el servidor no le pedirá una contraseña que ver por qué su cliente no le presentará esa opción si el servidor la ofrece. Hay muchas opciones de configuración en su extremo, y muy pocas en la suya. Es posible que alguien con su dirección IP haya intentado iniciar sesión demasiadas veces sin la contraseña correcta, y los intentos futuros de su IP se hayan deshabilitado. Dispara, acabo de leer la respuesta de Olli. Eso es.
Marc