¿Cómo agrego permanentemente una identidad para SSH?


37

Necesito ejecutar ssh-add <key>cada vez que necesito ssh en un servidor web. ¿Hay alguna forma de agregar la identificación de forma permanente, por lo que no tengo que seguir agregando las identidades en cada inicio de sesión?

EDITAR: La clave es un archivo pem, que he descargado de un servicio en la nube.

Respuestas:


40

Genere su clave como de costumbre: ssh-keygenluego coloque esa clave en el servidor remoto con ssh-copy-id, que la sincronizará con las claves aceptadas del servidor remoto.

ssh-keygen
ssh-copy-id user@host

Le pedirá su contraseña y luego realizará todos los pasos necesarios para vincular su .pubclave con el servidor SSH remoto.

Por defecto, copiará todas sus claves .pub al servidor remoto. Si acaba de crear su clave, ssh-keygenentonces esto no es un problema (¡porque solo tiene una!). Sin embargo, si tiene varias claves, puede copiar solo una clave específica con el -iindicador.

ssh-copy-id -i ~.ssh/key_name.pub user@host

Reemplazar key_name.pubcon el nombre de la clave.


44
Para alguien como yo (o el que pregunta) cuya única exposición a ssh es usarlo para acceder a servidores alojados en la nube donde el servicio web crea la clave y me la da (en mi caso, servidores de AWS), esta respuesta es difícil de entender. entender sin hacer una investigación de fondo significativa. Nunca he usado ssh-keygeno ssh-copy-id, por ejemplo. Por otro lado, respuestas como esta son perfectamente claras y útiles para mí dado mi nivel de conocimiento. Depende de usted si desea modificar su respuesta de alguna manera para ayudar a personas ignorantes como yo. :)
Mark Amery

La respuesta asume que quiero generar una nueva clave. ¿Qué sucede si simplemente quiero registrar una clave existente con el llavero?
donquixote

@donquixote: vea la respuesta a continuación por user626052.
nada101

7

Puede generar una clave ssh con el comando:

ssh-keygen

Luego puede copiar su clave al servidor con:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

Ahora puede iniciar sesión automáticamente en su servidor web


1
Para copiar la clave a su servidor, puede usar ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernameo ~/.ssh/id_rsa.pubrespectivamente. En realidad, si usa el nombre predeterminado para el archivo de clave, ni siquiera tiene que especificarlo.
Carsten Thiel

5

pon esto en tu ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 

3
Esta es la única respuesta que realmente responde a la pregunta. Los demás simplemente agregan la clave pública predeterminada a un único servidor de destino, lo cual es molesto si tiene dos + separados para diferentes conjuntos de servidores.
naught101

3

Si su clave no tiene contraseña y está nombrada como uno de los archivos que ssh intentará buscar al identificar ( ~/.ssh/id_dsao ~/.ssh/id_rsa), no debería tener que agregarla a su agente.

PERO. Si existe la más mínima posibilidad de que esos archivos sean robados, simplemente habría permitido que cualquiera acceda a los servidores en los que está utilizando esta identidad. En resumen, pwned.

En mi humilde opinión, las claves privadas sin contraseña son una mala práctica, y deben usarse solo en entornos donde ~/.ssh/authorized_keyses muy restrictivo.


1
ssh-agent puede mantener su clave privada descifrada, mientras está conectado. Si está habilitado, el llavero gnome puede incluso usar su contraseña de inicio de sesión. Ah, y ssh-copy-id también puede copiar su clave pública a los servidores.
Frank

2

Escriba una secuencia de comandos de shell corta que ejecutará ssh-add y luego se conectará de la siguiente manera:

ssh-add ~/.ssh/your-key
ssh user@remotehost

Luego puede ingresar a su host con un solo comando.


1

Para AWS, descargue la clave pem y ejecute:

ssh-add /path/to/pemfile.pem

Eso funcionó para mí, ubuntu 18.04. Fuente , no se necesitaba nada más.

NB : Sin embargo, es importante establecer los permisos en 400 antes de hacer esto.

chmod 400 /path/to/pemfile.pem

Si no, recibirá un error:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @
ADVERTENCIA: ¡ARCHIVO DE CLAVE PRIVADA SIN PROTECCIÓN! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ Los permisos 0664 para '/home/toing_toing/blablabla.pem' están demasiado abiertos. Se requiere que sus archivos de clave privada NO sean accesibles por otros. Esta clave privada será ignorada.


0
 ssh serveruser@servername "cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys" 

-2

¿Estás hablando de Amazon Cloud? En su ~ / .bashrc, cree variables de entorno:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

Sí, me refiero a la nube, pero este es el par de claves ssh en la instancia, y las variables de entorno anteriores son necesarios para utilizar las API-herramientas :)
theTuxRacer

Okay. Por lo tanto, genere una clave RSA sin contraseña: 'ssh-keygen -t rsa' y luego concatene la clave pública generada (~ / .ssh / id_dsa.pub) al archivo ~ / .ssh / optional_keys del servidor remoto. Muchos dieron una frase para lograr esto.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.