¿Cómo agrego claves SSH al archivo autorizado_claves?

185

Tengo un servidor Ubuntu en Amazon EC2, que uso para el desarrollo, y hoy borré estúpidamente todo de mi ~/.ssh/authorized_keysarchivo. Afortunadamente, tengo un SSH abierto, así que todavía estoy conectado y puedo arreglar el archivo, pero cuando intento volver a colocar mi archivo de clave, no funciona. Todavía recibo el permiso denegado del servidor en mi máquina local.

authorized_keystiene los permisos 600. He intentado agregar mi clave SSH con ssh-rsa y dejar la ssh-rsa desactivada. También intenté hacer que la clave SSH fuera una sola línea, pero tampoco funcionó.

¿Hay algo más que deba hacer, como volver a cargar el archivo?

Dave Long
fuente
3
Años después, esto -todavía- parece relevante y activo; solo quería hacer una observación, hablar de haber esquivado una bala: "Por suerte tengo un SSH abierto, así que todavía estoy conectado [..]" - ¡sheesh! ; dP
Nostromov
1
Esta publicación, que fue editada en mi cumpleaños, me salvó hace dos meses en mi cumpleaños.
ytpillai

Respuestas:

198

Usted debe nunca se guarde el archivo con su contenido a partir de -----BEGIN RSA PRIVATE KEY-----en el servidor, que es su privado clave. En su lugar, debe poner la clave pública en el ~/.ssh/authorized_keysarchivo.

Esta clave pública tiene la .pubextensión cuando se genera usando ssh-keygeny su contenido comienza con ssh-rsa AAAAB3. (El formato binario se describe en las respuestas a esta pregunta ).

Los permisos de ~/.sshen el servidor deben ser 700. Se ~/.ssh/authorized_keyssupone que el archivo (en el servidor) tiene un modo de 600. Los permisos de la clave (privada) en el lado del cliente deben ser 600.

Si la clave privada no estaba protegida con una contraseña y la puso en el servidor, le recomiendo que genere una nueva:

ssh-keygen -t rsa

Puede omitir esto si está completamente seguro de que nadie puede recuperar la clave privada eliminada del servidor.

Si esto no ayuda, ejecute sshcon opciones para más verbosidad:

ssh -vvv [email protected]

En el lado del servidor, puede revisar /var/log/auth.logpara obtener más detalles.

Lekensteyn
fuente
1
Con los servidores Amazon EC2 todo lo que obtengo es la clave privada (key.pem). No tengo una clave pública en ningún lado.
Dave Long
3
@Dave Long: debe generar una nueva clave utilizando ssh-keygen -t rsay poner el id_rsa.pubarchivo recién creado en ~/.ssh/authorized_keyssu servidor. Ver también docs.amazonwebservices.com/AWSEC2/latest/UserGuide/…
Lekensteyn 01 de
15
@DaveLong: puede generar la clave pública a partir de la clave privada en cualquier momento. Puede hacer esto simplemente con el siguiente comando: ssh-keygen -y -f key.pem > key.pub
Morgan Blackthorne
55
@MorganBlackthorne Si bien eso es cierto, recomendaría generar sus claves privadas en lugar de aceptar una de fuentes remotas. No puede estar completamente seguro de que la clave privada no se haya filtrado.
Lekensteyn
2
@Gerrat Fixed².
Lekensteyn
175

Una forma alternativa de instalar su clave pública en la máquina remota authorized_keys:

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Algunas ventajas:

  • No requiere ssh-copy-idser instalado.

  • garantiza que mkdirfunciona antes de intentar adjuntar id_rsa.puba authorized_keys.

Marius Butuc
fuente
10
Su respuesta me ayudó a hacer esto en múltiples máquinas remotas sin ningún paquete adicional, gracias.
nol
Esto no garantiza que el directorio "~ / .ssh" y el archivo "~ / .ssh / Authorizedkeys" se crearán con los permisos correctos.
Nick
1
@ Nick, tuve ese problema. Entonces, tal vez uno deba primero verificar su existencia, si falta crear correctamente con chmod (700 / folder, 600 / file), y solo luego agregar. Entonces, ¿tal vez no puede ser un trazador de líneas?
AnneTheAgile
77
@AnneTheAgile Creo que cambiar la mkdir -p ~/.sshparte de la respuesta dada por @MariusButuc umask 077 && mkdir -p ~/.sshes todo lo que necesita hacer para asegurarse de que funcione correctamente.
Nick
1
ty @Nick! Lo intentaré.
AnneTheAgile
128

Si tiene autenticación basada en inicio de sesión, ssh-copy-idúsela para agregar sus claves públicas al servidor remoto.

ssh-copy-id user@host
Shoaib Nawaz
fuente
1
Ese no parece ser un comando válido en Mac, que es lo que es mi máquina cliente.
Dave Long
13
en OSX puede instalar con brew:brew install ssh-copy-id
phil
En Macports, este comando se puede instalar usando sudo port install openssh +ssh_copy_id. Las +ssh_copy_idinstalaciones se abren con la variante ssh_copy_id.
Stefan Lasiewski
66
Tenga en cuenta que las instrucciones en phildawson.tumblr.com le piden que instale software no confiable, como root. Esto es bastante peligroso y una buena forma de ser hackeado, a menos que sepa que puede confiar en el autor.
Stefan Lasiewski
38
local> scp .ssh/id_dsa.pub remote.com:
local> ssh remote.com
remote> cat id_dsa.pub >> .ssh/authorized_keys
remote> rm id_dsa.pub
remote> exit
jjg
fuente
16

La forma más fácil es copiar y pegar ...

Primero vea / copie el contenido de su clave pública local, id_rsa.pubincluido el comienzo "ssh-rsa" hasta que termine con su dirección de correo electrónico:

cat ~/.ssh/id_rsa.pub

Luego edite authorized_keysen el servidor y pegue el contenido de su portapapeles debajo de cualquier otra clave en ese archivo:

nano ~/.ssh/authorized_keys

Y guarde Ctl+O, salga del archivo Ctl+X, salga de la sesión SSH exite intente iniciar sesión nuevamente para confirmar que funcionó. Si no solicitó una contraseña, funcionó.

ow3n
fuente
5

Pensé que podía contribuir a esto, ya que se trata específicamente de instancias de AWS y todas las respuestas solo tratan el problema como un problema de Linux, como si fuera una pieza de hardware. Lo primero que debe comprender es que nunca, nunca, no debe tratar las instancias de EC2 como hardware. Eso solo creará más trabajo para usted. Trátelos como volátiles. Ese es el mayor obstáculo que veo que la gente tiene con AWS. Haga un AMI de su instancia e inyecte la clave que necesita en la nueva instancia. cloud-init se encargará de ti. Con más detalle, todo lo que tiene que hacer es usar la clave pública correcta al crear la nueva instancia a partir de la AMI del original. Si, como en los comentarios de la respuesta aprobada, desea generar su propio par de claves de archivos pub y pem, AWS le ofrece la opción de cargar sus claves públicas para usar en EC2.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws

einarc
fuente
3

Después de guardar la clave pública, debe guardar la clave privada en un directorio y archivo en su PC. Y en la sección de autenticación de ssh en masilla, debe apuntar al archivo de clave privada que guardó en su escritorio. Funcionará. Esto funciona para mi.

usuario273266
fuente
1
Me encantaría que la consola de Windows pudiera tener toda la funcionalidad ssh agregada en su intérprete
Dennis
2

Obtenga un shell en la máquina remota donde desea colocar la clave y luego puede ejecutar esta línea para crear los archivos y directorios necesarios, establecer sus permisos y agregar la clave al archivo. Por supuesto, debe cambiar la KEYGOESHEREparte a continuación y el comentario después.

mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && echo "ssh-rsa KEYGOESHERE user@remotehost or note" >> ~/.ssh/authorized_keys
Sarel Botha
fuente
1

Aquí hay una variación por la cual puede tener una lista de nombres de archivos de clave pública en un archivo de texto y el gran lote de archivos de clave pública también están en el mismo directorio.

Esta variación puede ser útil si proporciona una gran lista de archivos de clave pública para importar :-)

$ for i in $(cat ListOfPubKeyFiles.txt) ; do cat $i | ssh User@Hostname "cat >> ~/.ssh/authorized_keys"; done
jlmontes
fuente