Tratando de hacer autenticación ssh con archivos clave: el servidor rechazó nuestra clave

53

Estoy tratando de configurar la autenticación ssh con archivos clave en lugar de nombre de usuario / contraseña. El cliente es una caja de Windows que ejecuta PuTTY y el servidor es un servidor Ubuntu 12.04 LTS.

Descargué puttygen.exe y tuve que generar un par de claves. En /etc/ssh/sshd_configtengo esta línea:

AuthorizedKeysFile %h/.ssh/authorized_keys

y en el archivo de clave pública de mi cliente dice esto:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "[email protected]"
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAr3Qo6T5XU06ZigGOd3eKvfBhFLhg5kWv8lz6
qJ2G9XCbexlPQGanPhh+vcPkhor6+7OmB+WSdHeNO652kTofnauTKcTCbHjsT7cJ
GNrO8WVURRh4fabknUHPmauerWQZ6TgRPGaz0aucU+2C+DUo2SKVFDir1vb+4u83
[email protected]
---- END SSH2 PUBLIC KEY ----

Copié la parte de "ssh-rsa AAA" a "[email protected]" y la puse en el archivo ~/.ssh/authorized_keysde mi servidor (en mi propia carpeta personal). En PuTTY en Conexión> SSH> Auth, ingresé la ruta a la clave privada que generó en mi cliente y guardé la configuración de la sesión.

Reinicié el servidor ssh con

sudo service ssh restart

Ahora, si cargo el perfil en PuTTY (verifiqué que la clave privada todavía está en Conexión> SSH> Auth y que la ruta es correcta) y ejecuto el perfil, dice

Server refused our key

Traté de poner la clave pública en un archivo debajo del directorio, ./ssh/authorized_keys/ pero eso no ayudó, así que lo usé ./ssh/authorized_keyscomo un archivo , pegando la clave en él. También intenté generar un par de claves privada / pública en el servidor, poner la clave pública ./ssh/authorized_filesy cargar la privada en PuTTY en mi cliente. Reiniciar el servidor tampoco ayudó.

Descubrí que el error puede resolverse colocando la clave en un lugar fuera de la carpeta de inicio del usuario, pero eso solo es útil si la carpeta de inicio está encriptada, lo cual no es así.

También intenté generar una clave de 4096 bits, pensando que quizás 1024 era demasiado corto.

¿Cómo puedo hacer que esto funcione? ¡Gracias!

EDITAR:

Ok, /var/log/auth.logdijo:

sshd: Authentication refused: bad ownership or modes for directory /home/vorkbaard/.ssh

Google me dice que ~/.ssh/debería ser 700 y ~/.ssh/authorized_keysdebería ser 600, así que lo hice. Ahora /var/log/auth.logdice:

sshd: error: key_read: uudecode AAAAB3N [etc etc etc until about 3/4 of my public key]
Horquilla
fuente

Respuestas:

95

Ok, está arreglado, sin embargo, no veo cómo esto es diferente de lo que ya intenté.

Lo que hice:

  • generar un par de claves con puttygen.exe (longitud: 1024 bits)
  • cargar la clave privada en el perfil PuTTY
  • ingrese la clave pública ~/.ssh/authorized_keys en una línea (necesita comenzar con ssh-rsa)
  • chmod 700 ~/.ssh
  • chmod 600 ~/.ssh/authorized_keys
  • chown $USER:$USER ~/.ssh -R
  • cambiar /etc/ssh/sshd_configpara que contengaAuthorizedKeysFile %h/.ssh/authorized_keys
  • sudo service ssh restart

Para solucionar problemas de hacer # tail -f /var/log/auth.log.

¡Gracias por tu ayuda!

Horquilla
fuente
1
Hmm, entonces, ¿qué pasó con ese sshd: error: key_read: uudecode AAAAB3Nerror auth.log?
Alaa Ali
No tengo idea, Alaa. Tal vez cometí un error al pegar la cadena de clave anterior. Auth.log ya no recibe más entradas y la autenticación basada en claves funciona a la perfección. Mi principal problema era que no estaba realmente seguro de lo que tenía que hacer, lo que hacía que esto fuera mucho más difícil. Entonces no sé por qué, pero funciona. Gracias de nuevo por su ayuda :)
Forkbeard
¡¡¡Increíble!!! He estado rascándome la cabeza durante 2 días. ¡Esta respuesta salva el día!
naka
El paso 3 fue el truco para mí. No puse la clave pública en el authorized_keysarchivo, simplemente pegué mi mykey.pubarchivo en la ~/.sshcarpeta y pensé que lo recogería. En cambio, lo que necesitaba en última instancia era ejecutar esto o editar y pegar debajo de otras teclas que pueden estar allí. cat mykey.pub >> authorized_keys. Parece simple ahora, pero la lección aprendida es que todas las claves públicas tienen que vivir authorized_keysno solo en el ~/.ssh/directorio. Alguien avise si esta no es una afirmación correcta.
timbrown
si los pasos no ayudan, verifique también: 1. copió la clave pública PuTTY guardada en claves autorizadas, no la de OpenSSH 2. si copió usando copiar / pegar desde PuTTYgen (que debe hacer), puede haber dividido el clave pública en múltiples líneas; debería ser una sola línea; asegúrese de no agregar espacios iniciales o finales durante la copia gracias a r_hartman centos.org/forums/viewtopic.php?t=990
mvladk
23

Acabo de encontrar este problema. A pesar de que la configuración se configuró correctamente, como ya se mencionó en este hilo (permisos en autorizado_claves, etc.), resulta que tenía la clave pública en el formato incorrecto. Fue en forma de:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "imported-openssh-key"
AAAAB3NzaC1yc2EAAAADAQABAAABAQDUoj0N3vuLpeviGvZTasGQ...
... lPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT
---- END SSH2 PUBLIC KEY ----

Lo que no estaba funcionando. Pero lo tengo funcionando teniendo en la forma:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU.....j0N3vuLpeviGvZTasGQa1rcJiPXQMW7v3uurb+n94B9MQaaWR0odsg5DJQL92TNenOda5BO1nd08y6+sdLQmHXExTz6X8FzgoVsAkEl3RscxcxHUksiKA9JfTo38vQvG/bPxIHMCuSumCQVA1laf3rO/uOrkcB7iMWhaoi1/z6AbFtPzeh7xjGfInMWwtBI0CsHSRF73VWIxT26w0P+KjafCjSn/7vDO1bT8QHujSQelU/GqaVEvbbvPl1a7POVjKgHLNekolwRKfNeVEewcnmZaoqfHgOKlPmTrOfVTxI9wjax2JvKcyE0fiNMzXO7qiHJsQM9G9ZB4Lkf71kT UserName@HOSTNAME
kuraara
fuente
14
Puede usar ssh-keygen -i -f filenameofwindowsformpub.keypara transformar la clave pública en el formato que entiende su servidor OpenSSH.
Negro
¡Sí, funcionó para mí! Tiene que estar en una sola línea. ¡No puedo creer que fuera solo eso!
adelriosantiago
1
Hola kuraara Creo que las instrucciones anteriores de @Black deben destacarse en la respuesta.
ekerner
¿Puedo agregar comentarios al formato del servidor OpenSSH? Para los humanos es difícil saber qué computadora representa esta tecla.
user1700890
Cuando sigo la sugerencia de @Black, no hay UserName @ HOSTNAME al final de la cadena. No sé si esa parte importa.
arnoldbird
9

El problema es que Windows utiliza una nueva línea diferente a Linux, por lo que al copiar la clave de Windows a Linux, hay un \ n al final de la línea que no puede ver en Linux en el editor.

Si sigue el /var/log/auth.log e intenta iniciar sesión, el error es como:

sshd: error: key_read: uudecode AAAAB3N [....] == \ n

Si cambia su clave en Windows, por lo que está en una sola línea sin una nueva línea al final y la copia en Linux, debería funcionar (fue el truco para mí).

Mischa
fuente
este era mi problema, pero no vi nada en auth.log para sugerir que ese fuera el caso. frustrante ...
Anthony
8

Tuve que cambiar los permisos al directorio de inicio

chmod 700 ~
Michal Zmuda
fuente
2
Esto funcionó para mí también (en AIX).
stevepastelan
También funcionó para mí en CentOS
Jaywalker
¡Trabajó para mí en Redhat! El acceso de escritura grupal parece ser el problema específico. Todavía funciona para mí si dejo permisos de lectura grupales en su lugar: "chmod 740 ~".
Paul
6

Tuve que cambiar los permisos de directorio ~ / .ssh de 770 a 700 y los permisos de archivo ~ / .ssh / Authorised_keys de 660 a 600.

Por alguna razón, eliminar los permisos de grupo solucionó este problema para mí.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
dopple
fuente
5

El ~/.ssh/authorized_keysarchivo requiere que las claves estén todas en una línea. Si lo agregó a través de varias líneas como en su pegado anterior, intente unir las líneas.

Pablo
fuente
Gracias, eso tiene sentido y ahora entiendo por qué es un archivo, no un directorio. Sin embargo, no ayudó.
Forkbeard
3
Para cualquiera que pueda estar confundido por esto, lo que quiere decir es que cada clave en sí misma debe estar en una sola línea, pero diferentes claves deben estar en diferentes líneas.
Anthony
2

Esto es lo que funcionó para mí:

En puttygen, después de haber generado sus claves, asegúrese de copiar y pegar la información del campo superior para ir a su archivo autorizado_claves. Si guarda su clave pública en su máquina cliente y luego la abre, el texto es diferente del texto en la parte superior de la puttygenpantalla. Nuevamente, asegúrese de copiar y pegar el texto desde la PARTE SUPERIOR de la puttygenpantalla (después de haber creado sus claves) en su archivo autorizado_claves que debe ubicarse en ~/.ssh.

zach
fuente
Esto realmente solucionó el problema. No entiendo por qué si hace clic en guardar la clave pública, por qué no guarda el formato adecuado.
luky
1

Además de todas las respuestas anteriores, ¡asegúrese de copiar y pegar la clave puttygencorrectamente!

Si hace doble clic en la mayor parte de la cadena de teclas para seleccionarla, es posible que no obtenga la cadena completa, porque el cuadro de texto divide líneas en algunos caracteres, por ejemplo +, de modo que no seleccione el texto después del +carácter ( que no puede ver porque el cuadro de texto es demasiado pequeño). Asegúrese de seleccionar la cadena completa manualmente, desde el ssh-rsafinal del cuadro de texto.

Mark Lakata
fuente
1

A veces puede ser un problema asociado con tener la clave pública en una línea, este enfoque parece resolverlo

echo 'the content of the public key' > /root/.ssh/authorized_keys
dav
fuente
1

para mí, el problema era que había creado ~/.ssh/authorized_keysusando root, por lo que era propiedad de root Tuve chown sshuser:sshuser ~/.ssh/authorized_keysque empezar a trabajar

Cacahuete
fuente
1

También me enfrenté a este error y lo resolví cambiando los permisos del archivo autorizado_claves a 600.

chmod 600 ~/.ssh/authorized_keys
Kaleem
fuente
1

El error común es que las personas usan el editor de texto (como Vim) y pegan el texto copiado antes de activar la "inserción" (presione + i en Vim antes de pegar)

hakabe
fuente
0

De hecho, cambié authorized_keysel permiso de 644, luego resolví el problema.

chmod 644 ~/.ssh/authorized_keys
Peter Liang
fuente
0

para depurar ssh abierto se puede usar:

sudo `which sshd` -p 2020 -Dd

ejecuta sshd en otro puerto 2020. ejecuta sshd como un programa actual, por lo que la salida va a la pantalla. si está cerrado está cerrado.

luego intenta conectarte.

explicación:

  • `which sshd` - localiza la dirección sshd, intente ejecutar cual sshd vea lo que imprime. cuando usa comillas inversas, se ejecuta y devuelve el resultado en su lugar.
  • -p 2020: especifica el puerto
  • -D - iniciar sesión en el archivo
  • -d - iniciar sesión en la pantalla

https://www.attachmate.com/documentation/rsit-unix-802/rsit-unix-guide/data/sshd_options_ap.htm

Shimon Doodkin
fuente
¿Podría ampliar esta respuesta? ¿Qué implican los argumentos? ¿Qué está haciendo el comando (para alguien sin experiencia)?
Zzzach ...
-1

Estaba creando los archivos .ssh y Authorizedkeys mientras estaba conectado como root, lo que daba los permisos incorrectos. También colocó todos los archivos en el directorio raíz.

Cambiar la propiedad de esos archivos al usuario que desea no será una buena práctica, así que volví sobre mis pasos y me aseguré de haber iniciado sesión como el usuario con el que quería utilizar SSH y creé .ssh y Authorizedkeys nuevamente.

Instrucciones para conectar Win7 al servidor Xubuntu 15.04: Cómo crear claves SSH con masilla para conectarse a un VPS

Leo Fisher
fuente