¿Forma directa de ejecutar ssh-agent y ssh-add al iniciar sesión a través de SSH?

38

Estoy intentando que los siguientes comandos se ejecuten automáticamente cuando inicio sesión en mi servidor a través de ssh:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

Mi clave ssh tiene una frase de contraseña y estoy bien con ingresarla una vez por inicio de sesión.

Intenté poner esto en mi archivo .bashrc, sin embargo, creo que ssh-agent inicia una nueva sesión de bash. Cuando intento iniciar sesión después de tener esto en mi .bashrc, se atasca y tengo que escribir 'salir' para ver el mensaje 'ingresar contraseña para desbloquear clave'

¿Cualquier otra sugerencia?

El servidor está ejecutando Ubuntu LTS

Haga clic en Upvote
fuente
¿Por qué agente clave en el servidor? Debe estar en su cliente local desde el que se está conectando.
Zoredache
@Zoredache que quiero poder hacer git pully cosas así en el servidor remoto
Haga clic en Upvote
Luego ejecute un agente SSH en su máquina local y reenvíe el agente.
Zoredache
@ Zoredache Gracias, no sabía que eso era posible. Sin embargo, todavía me gustaría poder hacer ssh-add / ssh-agent desde un script bash, incluso desde mi máquina local. Es un dolor tener que ejecutar esos comandos manualmente.
Haga clic en Upvote

Respuestas:

52

Puedes intentar agregar esto:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

De esta manera ssh-agent, no inicia un nuevo shell, solo se inicia en segundo plano y escupe los comandos del shell para establecer las variables de entorno apropiadas.

Como se dijo en el comentario, tal vez no desee ejecutar el agente en absoluto en el host remoto, sino en el cuadro desde el que está trabajando y usar

ssh -A remote-host

reenviar los servicios de su agente ssh local al host remoto.

Por razones de seguridad, solo debe utilizar el reenvío de agentes con hosts administrados por personas confiables, pero es mejor que ejecutar un agente completo de forma remota en cualquier momento.

Tobi Oetiker
fuente
Cuando reemplazo ssh-agent /bin/bashcon ssh-agent -s, y luego trato de hacerlo git pull, todavía me piden la frase de contraseña de la clave privada para desbloquearla. Eso no es realmente lo que quiero, solo quiero ingresar la frase de contraseña al hacer ssh-add, y no tener que repetirla cada vez que ejecuto algún comando git. ¿Algunas ideas?
Haga clic en Upvote
y ejecutar el agente localmente y usar ssh -A no es una opción para usted? El problema es que no puede 'reiniciar' el agente ssh en cada conexión. Cada vez que lo inicia, no sabe 'nada' y cuando agrega la clave ssh tendrá que descifrarlo ...
Tobi Oetiker
para su archivo .ssh / config: Host remote-host ControlMaster auto ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Tobi Oetiker
1
Ups, me di cuenta en bash que necesitas una evaluación adicional frente a la llamada de ssh-agent ... actualicé mi respuesta anterior
Tobi Oetiker
1
podrías crear un alias
Tobi Oetiker
2

Una alternativa es usar Funtoo llavero . Entonces puedes pegar esta frase en tu caparazón de bash:

eval $(keychain --eval id_rsa)

Eso hace lo mismo (inicia el agente ssh, etc.), mientras que tampoco ejecuta un proceso ssh-agent para cada subshell. En su lugar, busca las instancias "ya en ejecución" que posee y las adjunta a ellas.

Erik Aronesty
fuente