ssh ya no permite la autenticación de clave pública

22

Mi máquina recientemente dejó de aceptar la autenticación de clave pública entrante. Tengo un escritorio ubuntu 11.04 en el que ingreso desde una máquina Windows. Yo uso masilla con concurso. Puedo conectarme pero solo con autenticación de contraseña interactiva, no con mi clave rsa que he configurado.

Ya he verificado que la clave aparece en ~ / .ssh / Authorizedkeys. ¿Cómo soluciono esto y qué verifico?

Andrew Redd
fuente
2
En primer lugar comprobar que los tres ~, ~/.sshy ~/.ssh/authorized_keyssólo pueden ser escritos por usted (en particular, el permiso de escritura grupo no). Busque /var/log/auth.logentradas de registro creadas en el momento de sus intentos de inicio de sesión. Copie y pegue en su pregunta (edite los nombres para mayor privacidad si lo desea). También verifique si el problema es puramente del lado del servidor o no: copie la clave privada en la máquina Linux (necesitará convertir el archivo de clave privada de PuTTY al formato OpenSSH) y ver si ssh localhostfunciona.
Gilles 'SO- deja de ser malvado'
mi directorio personal fue escribible por alguna razón. Eso lo arregló. Ponlo como respuesta para que pueda aceptarlo.
Andrew Redd
stackoverflow.com/questions/6377009/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

28

Si la autenticación de clave pública no funciona: asegúrese de que en el lado del servidor, su directorio de inicio ( ~), el ~/.sshdirectorio y el ~/.ssh/authorized_keysarchivo, solo puedan ser escritos por su propietario . En particular, ninguno de ellos debe ser editable por el grupo (incluso si el usuario está solo en el grupo).chmod 755o chmod 700está bien, chmod 770no lo está.

Qué verificar cuando algo está mal:

  • Ejecute ssh -vvvpara ver una gran cantidad de resultados de depuración. Si publica una pregunta preguntando por qué no puede conectarse con ssh, incluya esta salida (es posible que desee anonimizar los nombres de host y de usuario).
  • Si puede, verifique que el servidor inicie sesión /var/log/auth.log .
  • Si la autenticación de clave pública no funciona, verifique los permisos nuevamente, especialmente el bit de grupo (ver arriba).
Gilles 'SO- deja de ser malvado'
fuente
(del wiki de etiquetas U&L , copiado a AU )
Gilles 'SO- deja de ser malvado'
1
¡Buena respuesta! Olvidé mi homedir: o
RobAu
Si está ejecutando una versión reciente de ssh (o sshd), las claves DSA ya no son compatibles por defecto debido a problemas de seguridad. La única solución real es actualizar a RSA o claves mejores.
Mikko Rantalainen
¿Cambié los permisos de mi carpeta de inicio y qué? ¡Estaba bloqueado de SSH! Cambié las claves ssh, no, el servidor todavía rechaza la conexión. ¡Estaba loco tratando de encontrar una solución y con su respuesta de chmod 700 a mi carpeta de inicio, ssh comenzó a funcionar! ¡Gracias! Si mi conexión de terminal se caía al intentar encontrar la solución, quedaría totalmente bloqueado del servidor. ¡Tenga cuidado de no jugar con los permisos de su carpeta de inicio! (Acabo de cambiar los permisos de mi carpeta de inicio, no la carpeta .ssh, pero aún bloqueado de SSH)
Tarik
9

Me encontré con lo mismo y finalmente descubrí que era porque cifraba mi directorio de inicio. SSH no puede leer el archivo authorised_keys hasta que inicie sesión, por lo que básicamente lo obliga a autenticarse con contraseña primero. Consulte la sección sobre el directorio de inicio cifrado en el siguiente enlace:

https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Encrypted_Home_Directory

Willie Wheeler
fuente
5

Si verifica los permisos en los directorios, y hay un "." justo después de ellos, es posible que tenga habilitado selinux, que se enredará con el intercambio de claves y, por defecto, la identificación de contraseña manual.

Puede deshabilitar SELinux para solucionar problemas siguiendo las instrucciones aquí: http://www.centos.org/docs/5/html/5.1/Deployment_Guide/sec-sel-enable-disable-enforcement.html , o simplemente edite el / etc / selinux / config y cámbielo de "imposición" a "deshabilitado".

Espero que esto ayude.

tweekd
fuente
Tenía habilitado selinux, pero deshabilitarlo no pareció solucionarlo. El truco para mí fue que chmod 600 ~/.ssh/authorized_keysel archivo se podía escribir en grupo. (a través de pyrosoft.co.uk/blog/2013/01/12/… )
David Carboni
Esto me ayudó! ¡Gracias!
907
También debe poder obtener la autenticación SSH trabajando con SELinux configurando los contextos SELinux correctos. Restaurar los contextos configurados por el sistema en su directorio de inicio ( restorecon ~ -R) es un buen punto de partida.
Josh Kelley
4

Me aseguraría de que su configuración en / etc / ssh / sshd_config sea correcta.

Para forzar el uso de PKI solamente y no permitir contraseñas, encuentre la línea

#PasswordAuthentication yes 

en su archivo, descomente y configúrelo en

PasswordAuthenticate no

También leería el balance de las configuraciones para asegurarme de que tengan sentido. En particular, intente asegurarse de utilizar claves RSA, ya que se sabe que DSA está comprometido.

cmdematos
fuente
11
Estás explicando cómo deshabilitar la autenticación de contraseña. Esto no ayudará a que la autenticación de clave pública funcione (la clave pública se prueba primero). Andrew: ¡no desactive la autenticación de contraseña hasta que esté seguro de que la autenticación de clave pública funciona!
Gilles 'SO- deja de ser malvado'
2

Una posible causa del problema es que tiene claves DSA pero ahora SSH (aparentemente) por defecto requiere claves RSA. Tengo el problema al actualizar a 16.04. Puede ver más aquí, pero la respuesta corta es agregar lo siguiente a ~/.ssh/config:

PubkeyAcceptedKeyTypes ssh-dss
DeegC
fuente
1

Solucioné este problema descomentando "PasswordAuthentication yes" en / etc / ssh / sshd_config.

Ben Ernest
fuente
1

Debido a la necesidad de solucionar problemas de comunicación entre dos máquinas diferentes, tenía dos claves privadas en ~/.sshel lado del cliente.

En lugar de configurar cada host del servidor con la clave privada respectiva ~/.ssh/identitycomo debería haber hecho, tuve la clave secundaria (y en este caso incorrecta) configurada para todos los hosts:

Host *
IdentityFile ~/.ssh/identity_b

La corrección ~/.ssh/identityresolvió el problema:

Host a
IdentityFile ~/.ssh/identity_a
Host b
IdentityFile ~/.ssh/identity_b
Uli Klumpp
fuente
0

Simplemente tuve el mismo problema, pero cambiar los permisos chmodno me ayudó, ya que resultó que no tenía la propiedad del ~/.ssh/authorized_keysarchivo. Puede cambiar la propiedad del .sshdirectorio con:

sudo chown -R "$USER" ~/.ssh
Mella
fuente
-1

De alguna manera esto funcionó para mí:

root @ kaiser: ~ # vim / etc / ssh / sshd_config

Cambie esta línea de sí a no 28 StrictModes no

Inténtalo de nuevo

sysadmin @ suselinux1: ~> con sysadmin kaiser Bienvenido a Ubuntu 12.04.1 LTS (GNU / Linux 3.2.0-25-generic i686)

Último inicio de sesión: vie 9 de noviembre 15:40:11 2012 de 10.1.3.25 sysadmin @ kaiser: ~ $ date vie nov 9 17:53:11 CST 2012 sysadmin @ kaiser: ~ $

theunbekanntshadow
fuente
3
Hacer algo sin saber qué hace y por qué funciona puede ser aceptable, pero sugerir lo mismo es malo y, para ser justos, peor si se trata de un sistema de seguridad.
Mahesh
2
convenido. deje que esto sea un incentivo para crear mejores sshddocumentos, que no caen exactamente en la categoría de "buena lectura del sábado"
code_monk