ssh-add se queja: no se pudo abrir una conexión con su agente de autenticación

151

He estado tratando de ssh-addtrabajar en un RaspberryPi con Raspbian.

Puedo comenzar ssh-agent, cuando lo hago da la siguiente salida en la terminal:

SSH_AUTH_SOCK=/tmp/ssh-06TcpPflMg58/agent.2806; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2807; export SSH_AGENT_PID;
echo Agent pid 2807;

Si corro ps aux | grep sshpuedo ver que se está ejecutando.

Luego trato de ejecutar ssh-addpara agregar mi contraseña clave y obtengo lo siguiente:

Could not open a connection to your authentication agent.

¿Algunas ideas?

Daniel Groves
fuente
66
Pruebaeval $(ssh-agent)
Ulrich Dangel

Respuestas:

224

Su shell está destinado a evaluar la salida de ese código de shell por ssh-agent. Ejecute esto en su lugar:

eval "$(ssh-agent)"

O si ya ha comenzado ssh-agent, copie y péguelo en su indicador de shell (suponiendo que esté ejecutando un shell similar a Bourne).

sshlos comandos necesitan saber cómo hablar con ssh-agentellos, lo saben desde la SSH_AUTH_SOCKvariable de entorno.

Stéphane Chazelas
fuente
Gracias, no entendí bien cómo funciona. Eso es muy apreciado.
Daniel Groves
2
O puede ingresar ssh-agent bash y después de que ssh-add funcione
RaduM
@Stephane, ¿entiendo correctamente que el comando ssh-agent simplemente imprime el resultado de su ejecución mientras que la versión eval realmente ejecuta el comando?
Denys S.
55
@DenysS. Bueno, no, hace su configuración y luego le dice a su shell cómo actualizar su entorno para poder contactarlo. No puede hacer eso por sí mismo. Puede iniciar un nuevo shell con el entorno actualizado (eso es lo que ssh-agent bashhace), pero no puede actualizar la memoria de un proceso separado que ejecuta un comando externo (el shell que ya está ejecutando).
Stéphane Chazelas
@StephaneChazelas, si mi ssh-agent se inicia en el arranque pero todavía tengo que evaluarlo en mi shell, ¿significa que no se evalúa automáticamente para cada shell y tiene que ser configurado de alguna manera por el usuario root?
Denys S.
27

Prueba este:

$ ssh-agent /bin/sh
$ ssh-add $yourkey
usuario48656
fuente
55
Esto realmente funcionó para mí donde ninguna de las otras respuestas funcionó.
Joseph Snow
2
Si está utilizando la concha de pescado, esta respuesta funciona. ssh-agent /usr/bin/fish.
slackmart
1
Recibo un error: " No se pudo abrir una conexión con su agente de autenticación " .
IgorGanapolsky
@slackmart Si instaló fish en BSD, su ubicación es /usr/local/bin/fish(alternativamente /usr/ports/shells/fish). Gracias a la whereisorden por ayudarme a resolver eso.
cjm
Genial @cjm, uso Slackware Linux, y ese es el camino que me funciona.
slackmart
12

Esta pregunta también se ha cubierto muy bien en Stackoverflow .

eval `ssh-agent -s`

ssh-add
xaa
fuente
Olvidaste las citas `...`. Sin ellos, el operador split + glob se invoca en la salida.
Stéphane Chazelas
6

Si usa csh como shell ( FreeBSD PI ) esto podría funcionar:

eval `ssh-agent -c`

a continuación solo necesitas hacer algo como:

ssh-add ~/.ssh/id_rsa
nbari
fuente
Recibo un error: " No se pudo abrir una conexión con su agente de autenticación " .
IgorGanapolsky
2

También puede usar la siguiente sintaxis:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'
kenorb
fuente
Esto no funciona para mí, si vas ssh-agent sh -c "ssh-add -l", te dirá que no tienes identidades.
Ain Tohvri 01 de
Como debe agregarlo primero, por ejemplo: ssh-agent sh -c "ssh-add && ssh-add -l"imprimirá su identidad.
kenorb
1

Prueba esto: ve C:\$Installation_Folder$\Git\cmd y ejecuta:

start-ssh-agent 

Se abrirá un comando cmd y se ejecutará de la ssh-agentmanera correcta.

ssh-add ~/.ssh/id_rsa Entonces debería funcionar.

sab125
fuente
" bash: start-ssh-agent: comando no encontrado "
IgorGanapolsky
1

Esto fue confuso y tiene 2 posibles buenas respuestas, dependiendo de si el usuario está intentando agregar una clave ssh en Linux o en Windows (como yo). Esto probablemente no responde al OP, pero es una expansión para git-bash. Ejecuto Windows y Ubuntu para el desarrollo, y mi instalación de git es ligeramente diferente en cada uno.

Pruebe esto: vaya a C: \ $ Installation_Folder $ \ Git \ cmd y ejecute:

start-ssh-agent Abrirá un comando cmd y ejecutará el agente ssh de la manera correcta.

.. fue una buena respuesta de Windows, pero no especificó que se esperaba que pasaras por el Explorador de Windows para encontrar la carpeta de instalación de Git y ejecutaras el shell de Windows que se abriría al completar el paso 1.
"ve a C: \ $ Installation_Folder $ \ Git \ cmd "

Paso 2: solo necesitas hacer doble clic

start-ssh-agent

En el paso 3, vuelve a git-bash o cualquier emulador de terminal * nix que esté ejecutando y ejecute ssh-add. Si usó el nombre predeterminado para la clave pública ssh, no tiene que agregar el nombre como ssh-add lo usa automáticamente.

Wolf Halton
fuente
1

Hay un par de formas si desea usar una identidad con sudo, por ejemplo sudo npm install.

Largo camino , pero también te da acceso de root para que no necesites usar sudomucho.

  1. Ejecutar
    sudo ssh-agent bash
    Esto le pedirá su contraseña y luego se ejecutará ssh-agentcon los privilegios del superusuario,
  2. Navega a la carpeta .ssh de tus usuarios
    cd /home/user/.ssh
  3. Desde allí puedes correr

    ssh-add id_rsa
    npm install git+ssh://git@YOUR-PROJECT-URL -g && npm link PROJECT-NAME
    

Camino corto , solo tu usuario (a menos que quieras sudo mucho)

eval "$(ssh-agent)"
ssh-add
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install git+ssh://git@PROJECT-URL -g && sudo npm link PROJECT-NAME
Belldandu
fuente
exporty evalfunciona tan bien como root siempre que el shell de inicio de sesión de root sea como Bourne. Si la cáscara de la raíz es csh o tcsh, useeval `ssh-agent -c`
Stéphane Chazelas
Tenga en cuenta que también puede dar rootacceso a su agente ssh haciendosudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas
Probé ambos también bash es bourne nuevamente shell y ninguno funcionó correctamente. todos los usuarios en mi instancia de debian jessie, incluida la raíz, están configurados para usar bash de forma predeterminada.
Belldandu
¿Qué intentaste? eval "$(ssh-agent)"en el indicador de un shell bash ejecutándose como root funcionará. Obviamente, necesitará ejecutar sshdesde ese shell o su descendiente para que hereden el SSH_AUTH_SOCK env var. eval "$(sudo ssh-agent)"; sudo ssh...no funcionará porque sudode forma predeterminada no pasa el SSH_AUTH_SOCK env var.
Stéphane Chazelas
Intenté eval "$(ssh-agent)"mirar más tarde para ver si hay algún tipo de error de configuración. Aunque la forma actual que le he dado a esta guía permite un control libre sobre qué usuario desea ser desde que ya es root y puede acceder a cualquier usuario id_rsa que esté en el servidor. Entonces, una vez que lo haga funcionar, editaré mi respuesta.
Belldandu