Claves SSH en Linux

Hola,

tengo unas dudas sobre el funcionamiento de las claves SSH.

Tengo un servidor Debian y he ejecutado el comando ssh-keygen. Éste me genera dos ficheros en el directorio ~/.ssh

id_rsa
id_rsa.pub

Con esto entiendo que he generado claves privada y pública de usuario para autenticarme contra ese servidor como ese usuario en particular. Después he reiniciado el servicio SSH.

He copiado el contenido de id_rsa en un fichero de texto plano en Windows y lo he adjuntado a un cliente SSH. Al intentar conectar con el servidor, éste me da el mensaje:

"Server refused our key"

No sé qué hago mal. ¿Alguna ayuda?

Gracias!

PD: luego querré generar pares de claves para autenticar el servidor y verificar que me estoy conectando al servidor correcto, pero eso supongo que va por otra vía.
Tienes que poner la id_rsa.pub en el servidor donde quieres conectarte (por ejemplo, gitlab, tiene un lugar dedicado a ello) e id_rsa dejarla tal cual esta en el directorio, el cliente debería utilizar la clave privada desde ahí, al menos en linux es así.
mekkon escribió:Tienes que poner la id_rsa.pub en el servidor donde quieres conectarte (por ejemplo, gitlab, tiene un lugar dedicado a ello) e id_rsa dejarla tal cual esta en el directorio, el cliente debería utilizar la clave privada desde ahí, al menos en linux es así.


En mi caso las claves están generadas desde el servidor al que me quiero conectar, con lo cual ambas ya existen en la máquina.

Supongo que esas claves sólo son válidas para el usuario en cuyo directorio están las claves.
banderas20 escribió:
mekkon escribió:Tienes que poner la id_rsa.pub en el servidor donde quieres conectarte (por ejemplo, gitlab, tiene un lugar dedicado a ello) e id_rsa dejarla tal cual esta en el directorio, el cliente debería utilizar la clave privada desde ahí, al menos en linux es así.


En mi caso las claves están generadas desde el servidor al que me quiero conectar, con lo cual ambas ya existen en la máquina.

Supongo que esas claves sólo son válidas para el usuario en cuyo directorio están las claves.


Aunque lo hayas generado en el servidor no lo coge automáticamente, haz lo siguiente copia ambas en tu usuario en la carpeta .ssh

Y desde la terminal de usuario no en el servidor haces algo como esto

ssh-copy-id -i ~/.ssh/mykey user@host


User el usuario creado en el servidor y te pedirá la clave de ese usuario en el servidor.

Con esto se copia correctamente tu clave pública y autorized_keys.

Luego una vez terminado pruebas a conectar con ssh user@host

https://www.ssh.com/ssh/copy-id

Saludos
luciferfran escribió:
Aunque lo hayas generado en el servidor no lo coge automáticamente, haz lo siguiente copia ambas en tu usuario en la carpeta .ssh


Esto ya está hecho de inicio [oki] . Incluso las he copiado en una subcarpeta autorized_keys

luciferfran escribió:Y desde la terminal de usuario no en el servidor haces algo como esto

ssh-copy-id -i ~/.ssh/mykey user@host


User el usuario creado en el servidor y te pedirá la clave de ese usuario en el servidor.

Con esto se copia correctamente tu clave pública y autorized_keys.

Luego una vez terminado pruebas a conectar con ssh user@host

https://www.ssh.com/ssh/copy-id

Saludos


El tema es que mi cliente SSH es un programa en Windows y estoy intentando usar la clave privada generada en el servidor. Con lo cual no tengo la opción de la línea de comandos. Aún así, debería funcionar. No entiendo por qué no.

Gracias!

EDIT: aclaro que son claves RSA generadas en el servidor Linux al que me voy a conectar, y las intento usar desde un programa tipo Putty desde Windows.
Es al revés, ssh-keygen sirve para generarte una clave para conectarte a otro sitio.

Para indicar al servidor SSH cuáles son las claves permitidas, hay que meter la clave pública en el archivo ~/.ssh/authorized_keys. No se requiere reiniciar el servidor.
amchacon escribió:Es al revés, ssh-keygen sirve para generarte una clave para conectarte a otro sitio.

Para indicar al servidor SSH cuáles son las claves permitidas, hay que meter la clave pública en el archivo ~/.ssh/authorized_keys. No se requiere reiniciar el servidor.


ssh-keygen genera un par de claves: pública y privada. No entiendo por qué no puedo usarlas para conectarme al mismo servidor desde el que ejecuto el ssh-keygen.

Una vez tengo el par de claves, las debería poder usar como quiera, no?

Gracias!
banderas20 escribió:
amchacon escribió:Es al revés, ssh-keygen sirve para generarte una clave para conectarte a otro sitio.

Para indicar al servidor SSH cuáles son las claves permitidas, hay que meter la clave pública en el archivo ~/.ssh/authorized_keys. No se requiere reiniciar el servidor.


ssh-keygen genera un par de claves: pública y privada. No entiendo por qué no puedo usarlas para conectarme al mismo servidor desde el que ejecuto el ssh-keygen.

Una vez tengo el par de claves, las debería poder usar como quiera, no?

Gracias!

Al conectarte, el ssh mira la lista que se encuentra en ~/.ssh/authorized_keys

Si la clave pública que estás usando para conectarte no está ahí, entonces no entras. Tan fácil como eso.

De cara al putty, tienes que usar el fichero de clave privada.
Buenas!
No se para que necesitas PuTTY a no ser que no uses los últimos Windows 10, pero si usas PuTTY tienes que transformar antes la clave para que te funcione con PuTTY.
Creo recordar que PuTTY Keygen te permite pasar la que tengas al formato que usa PuTTY.


Un saludo
amchacon escribió:Al conectarte, el ssh mira la lista que se encuentra en ~/.ssh/authorized_keys

Si la clave pública que estás usando para conectarte no está ahí, entonces no entras. Tan fácil como eso.

De cara al putty, tienes que usar el fichero de clave privada.


Está ahí dentro, y aún así no funciona :(

luciferfran escribió:Buenas!
No se para que necesitas PuTTY a no ser que no uses los últimos Windows 10, pero si usas PuTTY tienes que transformar antes la clave para que te funcione con PuTTY.
Creo recordar que PuTTY Keygen te permite pasar la que tengas al formato que usa PuTTY.


Hola!
Uso Putty porque es el cliente de Windows que más conozco y lo uso desde hace tiempo. No por nada en especial. (uso Win10 como cliente, en efecto ;))

No entiendo por qué he de transformar la clave. ¿RSA no es un estándar? Si no, dependiendo del cliente que use voy a tener varias claves diferentes. No entiendo el por qué... :(

Gracias!
banderas20 escribió:No entiendo por qué he de transformar la clave. ¿RSA no es un estándar? Si no, dependiendo del cliente que use voy a tener varias claves diferentes. No entiendo el por qué... :(

Gracias!


Porque PuTTy usa su propio formato de fichero (ppk) para almacenar las claves. El por qué de crear un formato específico para PuTTy se lo tendrás que preguntar a sus desarrolladores.

Aquí tienes un tutorial de como convertir de un formato a otro:
https://aws.amazon.com/premiumsupport/k ... -into-ppk/
Maxtorete escribió:Porque PuTTy usa su propio formato de fichero (ppk) para almacenar las claves. El por qué de crear un formato específico para PuTTy se lo tendrás que preguntar a sus desarrolladores.

Aquí tienes un tutorial de como convertir de un formato a otro:
https://aws.amazon.com/premiumsupport/k ... -into-ppk/


Supongo que aunque el formato sea diferente, la clave en sí es la misma, ¿no?

He convertido el fichero a .ppk y me sigue dando el error:

"Server refused our key"

:(
Prueba con BitVise SSH y así por lo menos puedes acotar el problema si realmente tiene que ver con Putty [oki]
@banderas20

Prueba desde la terminal de windows (power shell, consola de comando o la nueva terminal que está fenomenal https://github.com/microsoft/terminal) hacer la conexión por ssh con la clave normal, aunque si pusiste en autorizes_key la pública de manera manual mira los permisos que se han quedado, de todas formas en el log de sshd puedes ir depurando los errores.
Hola a todos.

Ya he conseguido que funcione. El error era muy tonto. authorized_keys era un directorio en lugar de un fichero.

Lo he cambiado y funciona a las mil maravillas.

Gracias a todos!
15 respuestas