¿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.

theTuxRacer
fuente

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.

Marco Ceppi
fuente
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

Arthur Knopper
fuente
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 
usuario626052
fuente
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.

zuzur
fuente
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.

hgolov
fuente
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.

toing_toing
fuente
0
 ssh serveruser@servername "cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys" 
wangjianli
fuente
-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/

fuente
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.