No se pudo abrir una conexión con su agente de autenticación


1607

Me encuentro con este error de:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

Intenté agregar las claves y aparece este error a continuación:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

26
Pregunta: una vez que haya revisado CADA respuesta en esta página, y ninguna de ellas funcione. ¿Qué puedes hacer a continuación?
Brandon Bertelsen

8
@BrandonBertelsen Pruebe este: $ ssh-agent /bin/sh y $ ssh-add $yourkey
shyam

@BrandonBertelsen A continuación, debe usar git config --listpara ver si ha configurado credential.helper; si lo tiene, debe eliminar esta configuración, ya que el ayudante no ayuda.
Yoyo

Respuestas:


2386

¿Empezaste ssh-agent?

Es posible que deba comenzar ssh-agentantes de ejecutar el ssh-addcomando:

eval `ssh-agent -s`
ssh-add

Tenga en cuenta que esto iniciará el agente para msysgit Bash en Windows . Si está utilizando un shell o sistema operativo diferente, es posible que deba usar una variante del comando, como las que se enumeran en las otras respuestas .

Ver las siguientes respuestas:

  1. ssh-add se queja: no se pudo abrir una conexión con su agente de autenticación
  2. Git push requiere nombre de usuario y contraseña (contiene instrucciones detalladas sobre cómo usar ssh-agent)
  3. ¿Cómo ejecutar el agente de autenticación (git / ssh)? .
  4. No se pudo abrir una conexión con su agente de autenticación

Para iniciar automáticamente ssh-agent y permitir que una sola instancia funcione en varias ventanas de consola, consulte Iniciar ssh-agent al iniciar sesión .

¿Por qué necesitamos usar en evallugar de solo ssh-agent?

Para saber por qué, vea la respuesta de Robin Green .

Claves públicas vs privadas

Además, cada vez que lo uso ssh-add, siempre le agrego claves privadas. El archivo ~/.ssh/id_rsa.pubparece una clave pública, no estoy seguro de si eso funcionará. ¿Tienes un ~/.ssh/id_rsaarchivo? Si lo abre en un editor de texto, ¿dice que es una clave privada?


18
@xtian No estoy seguro de entender el problema. No sé los detalles exactos, pero supongo que la clave privada nunca se envía a través de la red. Creo que ssh-addsimplemente descifra una clave privada cifrada en la máquina host, para que pueda usarse localmente ... nunca se envía a nadie . Supongo que solo las claves públicas se envían a través de una red. ¿Es mi comprensión incorrecta?

66
Eres muy amable Cupcake. Estás absolutamente en lo correcto. Culpa mía. ex aquí ; ssh-add agrega la clave privada para que el agente ssh del usuario (proceso en ejecución) pueda actuar en nombre del cliente / host con el servidor aceptando las claves rsa-lo que sea. Geez No sé qué me emocionó tanto.
xtian

22
Tengo curiosidad por qué eval ssh-agent -sfunciona, pero ssh-agentpor sí solo no.
DanielM

13
@DanielM: SSH necesita dos cosas para usar ssh-agent: una instancia de ssh-agent ejecutándose en segundo plano, y un conjunto de variables de entorno que le dice a SSH qué socket debe usar para conectarse al agente ( SSH_AUTH_SOCKIIRC). Si solo ejecuta ssh-agent, el agente se iniciará, pero SSH no tendrá idea de dónde encontrarlo.
Vanessa Phipps

44
Gracias por responder sin embargo. Me acabo de dar cuenta de que usaste comillas en el comando. Estoy tan confundido por qué la comilla invertida (`) funciona para el comando eval pero no para la comilla simple / doble (',") en mi shell bash
Weishi Zeng

540

Probé las otras soluciones en vano. Investigué más y descubrí que el siguiente comando funcionaba. Estoy usando Windows 7 y Git Bash .

eval $(ssh-agent)

Más información en: https://coderwall.com/p/rdi_wq


14
También funcionó en Windows 8.
Andreas Rudolph el

También estoy usando Windows 7 y Git Bash, y mi respuesta funciona bien. Sin embargo, es genial que también puedas hacerlo de esta manera.

2
Excelente !! Trabajó con Windows 10 también.
NitinM

1
Trabajó en Manjaro
code_flow

1
$ eval "$ (ssh-agent -s)" funcionó para mí en Windows 10
Andrew Anderson

261

El siguiente comando funcionó para mí. Estoy usando CentOS.

exec ssh-agent bash

3
Gracias, esto funcionó para mí, ejecuté 'exec ssh-agent zsh' para mi shell.
jasonmcclurg

2
Según esta "respuesta" eliminada , también funciona en Amazon Linux AMI. Supongo que es una solución Unix / Linux / * nix.

44
Me metí en un contenedor acoplable y ssh-add my.id_rsame fallaría. Pero exec ssh-agent zshdio un ambiente donde pude ssh-addsin problema. Y estoy dentro de mi contenedor acoplable :)
markuz-gj

¿Alguien puede explicar brevemente cuál pudo haber sido el problema? Gracias :) Esto funcionó en mi Ubuntu 14.04 también.
harkirat1892

trabajó en raspbian también
mega_creamery

215

MsysGit o Cygwin

Si está utilizando Msysgit o Cygwin, puede encontrar un buen tutorial en SSH-Agent en msysgit y cygwin y bash :

  1. Agregue un archivo llamado .bashrca su carpeta de inicio.

  2. Abra el archivo y péguelo en:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
    
  3. Esto supone que su clave está en la ~/.ssh/id_rsaubicación convencional . Si no es así, incluya una ruta completa después del ssh-addcomando.

  4. Agregar o crear un archivo ~/.ssh/configcon el contenido

    ForwardAgent yes
    

    En el tutorial original, el ForwardAgentparámetro es Yes, pero es un error tipográfico. Use todo en minúsculas o obtendrá errores.

  5. Reinicie Msysgit. Le pedirá que ingrese su frase de contraseña una vez, y eso es todo (hasta que finalice la sesión, o su agente ssh sea asesinado).

Mac OS X

Si no desea iniciar un nuevo agente ssh cada vez que abra un terminal, consulte Llavero . Ahora estoy en una Mac, así que utilicé el tutorial ssh-agent con zsh & keychain en Mac OS X para configurarlo, pero estoy seguro de que una búsqueda en Google tendrá mucha información para Windows.

Actualización : una mejor solución en Mac es agregar su clave al llavero Mac OS:

ssh-add -K ~/.ssh/id_rsa

Simple como eso.



1
Cuando hago eval `ssh-agent -s`el proceso no se detiene cuando salgo de cygwin.
Kiril

¿Hay alguna manera de configurar la configuración para Windows / gitbash para que no tenga que hacerlo todo el tiempo?
mix3d

44
Debería serlo ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent); de lo contrario, siempre se inicia un nuevo agente ssh. Maté mi máquina de vez en cuando cuando el usuario tenía cronjobs.
Destrucción

3
ForwardAgent yesno es necesario y es un riesgo de seguridad no teórico si está configurado para cualquier servidor no confiable. El acceso local a su agente clave debería funcionar independientemente de esta configuración.
SeldomNeedy

208

No se pudo abrir una conexión con su agente de autenticación

Para resolver este error:

golpetazo:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

Luego, use ssh-addcomo lo haría normalmente.


Buen dato:

Siempre olvidé qué escribir para los comandos ssh-agent anteriores, así que creé un alias en mi .bashrcarchivo como este:

alias ssh-agent-cyg='eval `ssh-agent -s`'

Ahora en lugar de usar ssh-agent, puedo usarssh-agent-cyg

P.ej

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

Fuente original de corrección:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


3
necesitará ejecutar el evalcomando cada vez que lo hubiera ejecutado anteriormente ssh-agent. Ahora uso un alias, vea la respuesta actualizada de cómo hago esto.
Chris Snow


También necesitaba usar la especificación ssh en lugar de https (consulte help.github.com/articles/changing-a-remote-s-url )
RunHolt

1
Usted señor, usted es asombroso. Gracias. ** Me enfrenté al mismo problema, mientras que la clonación de un acuerdo de recompra bitbucket, me ha preparado todavía una clave ssh, pero cuidado para conseguir el error: fatal: Could not read from remote repository..
Nishant Ghodke

Trabajó para mí en Windows 10 y git bash instalado
desmond13

116

Me enfrenté al mismo problema para Linux, y esto es lo que hice:

Básicamente, el comando ssh-agent inicia el agente, pero en realidad no establece las variables de entorno para que se ejecute. Simplemente envía esas variables al shell.

Necesitas:

eval `ssh-agent`

y luego ssh-add. Consulte No se pudo abrir una conexión con su agente de autenticación .



También funcionó para mí mientras tenía problemas para usar boot2docker en Windows.
Veve

Esto fue lo que me costó.
Tom

115

ssh-add y ssh (suponiendo que esté utilizando las implementaciones openssh) requieren una variable de entorno para saber cómo comunicarse con el agente ssh. Si inició el agente en una ventana de símbolo del sistema diferente a la que está utilizando ahora, o si lo inició incorrectamente, ni ssh-add ni ssh verán esa variable de entorno establecida (porque la variable de entorno está configurada localmente para el comando se establece en)

No dice qué versión de ssh está usando, pero si está usando cygwin's, puede usar esta receta del Agente SSH en Cygwin :

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

Esto iniciará un agente automáticamente para cada nueva ventana de símbolo del sistema que abra (lo cual es subóptimo si abre varios mensajes de comando en una sesión, pero al menos debería funcionar).



99
Me vinculó aquí desde otra pregunta SO. ¿Puedo preguntar por qué es necesario agregar esto al archivo de configuración de Bash? En mi máquina, todo lo que necesito hacer es ejecutar eval $(ssh-agent)y puedo usar ssh sin contraseña para cada nueva ventana de terminal.
Andy J

Eso no debería ser posible, a menos que esté lanzando nuevas terminales desde esa terminal.
Robin Green

114

correr

ssh-agent bash
ssh-add

Para obtener más detalles puedes buscar

ssh-agent

o corre

man ssh-agent

77
Recomiendo que si está trabajando con git bash en Windows intente esto.
Neeraj Sewani

@ neer17 esto me permitió usar ssh-copy-iden ubuntu. No estoy seguro de por qué no podría agregar la clave sin usar ssh-agentpara iniciar bash.
SomeGuyOnAComputer

2
Este es el de Windows! (probado en W10pro build 1809 y git 2.21.0)
Alfabravo

Estoy usando ZSH y esto funciona para mí:ssh-agent zsh; ssh-add
sirboderafael

97

Intenta con los siguientes pasos:

1) Abra Git Bash y ejecute: cd ~/.ssh

2) Intenta ejecutar el agente: eval $(ssh-agent)

3) En este momento, puede ejecutar el siguiente comando: ssh-add -l


99
Esta es la única solución aquí que funcionó para mí (en Windows 7). Primero usé el ps aux | grep sshy el killcomando en la respuesta de Rick para matar a los agentes. Después de eso ssh-addfuncionó sin el modificador -l (Usar -l dio un error). eval 'ssh-agent'como en la respuesta de Rick no funcionó, tuve que usar eval $(ssh-agent)como en la respuesta de Chechoro aquí.
Frug

66
+1 Tuve exactamente el mismo problema que OP (Windows 7) y esta es la única solución que me funcionó.
Weblurk


2
@Frug Es backticks, no apóstrofes; en el script de shell que significa ejecutar lo que contiene. $(ssh-agent)es equivalente `ssh-agent`pero más legible.
MM

96

En lugar de usar $ ssh-agent -s, solía $ eval `ssh-agent -s`resolver este problema.

Esto es lo que realicé paso a paso (paso 2 en adelante en GitBash):

  1. Limpié mi carpeta .ssh en C:\user\<username>\.ssh\
  2. Genera una nueva clave SSH
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. Compruebe si ya se está ejecutando algún ID de proceso (agente ssh).
    $ ps aux | grep ssh
  4. (Opcional) Si encuentra alguno en el paso 3, mate a esos
    $ kill <pids>
  5. Comenzó el agente ssh
    $ eval `ssh-agent -s`
  6. Se agregó la clave ssh generada en el paso 2 al agente ssh
    $ ssh-add ~/.ssh/id_rsa

3
'eval' no se reconoce como un comando interno o externo, programa operativo o archivo por lotes.
Chutipong Roobklom

Puede reiniciar el agente evaluando ssh-agent -sy agregando una clave anterior usando ssh-add ~ / .ssh / id_rsa. Si genera una nueva clave SSH, deberá actualizar esa clave en todos sus servicios, como github, bitbucket, etc.
Mohit Satish Pawar

¿Hay alguna manera de hacer que esto sobreviva Windows reinicia? Después del reinicio, no funciona hasta que ssh-agent -svuelva a iniciar "eval " y "ssh-add ~ / .ssh / id_rsa".
Michal Vician

1
después de buscar durante mucho tiempo, esta es la solución que funcionó
Sujit.Warrier

¡Gran explicación!
avivamg

56

En Windows 10 probé todas las respuestas enumeradas aquí, pero ninguna de ellas parecía funcionar. De hecho, dan una pista. Para resolver un problema, simplemente necesita 3 comandos. La idea de este problema es que ssh-add necesita que las variables de entorno SSH_AUTH_SOCK y SSH_AGENT_PID se establezcan con la ruta actual del archivo de calce de agente ssh y el número pid.

ssh-agent -s > temp.txt

Esto guardará la salida de ssh-agent en el archivo. El contenido del archivo de texto será algo como esto:

SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3044; export SSH_AGENT_PID;
echo Agent pid 3044;

Copie algo como "/tmp/ssh-kjmxRb2764/agent.2764" del archivo de texto y ejecute el siguiente comando directamente en la consola:

set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764

Copie algo como "3044" del archivo de texto y ejecute el siguiente comando directamente en la consola:

set SSH_AGENT_PID=3044

Ahora, cuando las variables de entorno (SSH_AUTH_SOCK y SSH_AGENT_PID) están configuradas para la sesión de consola actual, ejecute su comando ssh-add y no volverá a fallar al conectar el agente ssh.


2
¡Gracias! Esto era exactamente lo que necesitaba.
Isochronous

66
No, sigue igual.
Jaskey

3
Estos pasos son los mismos que hacer 'eval $ (ssh-agent)'
K.Nicholas

2
¡Arreglado en mi Windows 10! ¡Gracias!
ntl

1
Esto realmente me ayudó a salvar el problema en Linux ... solo necesitaba reemplazarlo setporexport
greg hor

30

Una cosa que encontré fue que evalno funcionó para mí usando Cygwin, lo que funcionó para mí fue ssh-agent ssh-add id_rsa.

Después de eso me encontré con un problema de que mi clave privada estaba demasiado abierta, la solución que pude encontrar para eso (desde aquí ):

chgrp Users id_rsa

tanto como

chmod 600 id_rsa

finalmente pude usar:

ssh-agent ssh-add id_rsa

¿ eval `ssh-agent`Usó, con los backticks `alrededor ssh-agent, como se muestra en mi respuesta ? Eso funcionó bien para mí en Cygwin. Parece que tienes razón, eso ssh-agent ssh-addtambién funciona, al menos en el msysgit Bash. Sin embargo, tenga en cuenta que esa id_rsaes la clave predeterminada que se utiliza, por lo que no necesita especificarla con ssh-agent ssh-add id_rsa.

Creo que había usado los backticks, pero para mí todavía no
tengo

1
OMG, RESUELVAS MIS HORAS DE FRUSTACIÓN. ¡Gracias!
Chee Loong pronto

Esta respuesta funcionó para mí en bash.
Lsakurifaisu

27

Para amplificar la respuesta de n3o para Windows 7 ...

Mi problema era que algunas variables de entorno requeridas no estaban establecidas, y n3o es correcto porque ssh-agent le dice cómo establecer esas variables de entorno, pero en realidad no las establece.

Como Windows no te permite hacer "eval", esto es lo que debes hacer en su lugar:

Redirigir la salida de ssh-agent a un archivo por lotes con

ssh-agent > temp.bat

Ahora use un editor de texto como el Bloc de notas para editar temp.bat. Para cada una de las dos primeras líneas: - Inserte la palabra "conjunto" y un espacio al comienzo de la línea. - Eliminar el primer punto y coma y todo lo que sigue.

Ahora borra la tercera línea. Su temp.bat debería verse así:

set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608

Ejecute temp.bat. Esto establecerá las variables de entorno que son necesarias para que ssh-add funcione.



Todavía obtengo Could not open a connection to your authentication agent.cuando ejecuto ssh-add en Win10 PowerShell.
Kebman

19

Acabo de hacer que esto funcione. Abre tu ~/.ssh/configarchivo.

Añadir lo siguiente

Host github.com
 IdentityFile ~/.ssh/github_rsa

La página que me dio la pista Configurar SSH para Git decía que la sangría de un solo espacio es importante ... aunque tenía una configuración aquí de Heroku que no tenía ese espacio y funciona correctamente.


1
Esto no ayuda a ingresar la frase de contraseña para la clave SSH.
alesch

1
Si no desea ingresar la frase de contraseña, cree una clave sin una. No tiene sentido tener una frase de contraseña si la vas a almacenar en tu script de todos modos.
Paul Becotte

Ese es el objetivo de usar ssh-agent. La contraseña de sus claves se almacena en un llavero seguro, manejado por ssh-agent.
alesch

Esta es la mejor respuesta para mí aquí. Tuve muchos problemas con ssh-agent comenzando miles de veces en Windows 7 y esa trampa de muerte no funcionó. No me importa no tener una frase de contraseña en mi computadora personal en casa.
Fleshgrinder

18

Si sigue estas instrucciones, su problema se resolverá.

Si estás en una máquina Mac o Linux, escribe:

eval "$(ssh-agent -s)"

Si estás en una máquina con Windows, escribe:

ssh-agent -s

13

Déjame ofrecerte otra solución. Si acaba de instalar Git 1.8.2.2 o por ahí, y desea habilitar SSH, siga las instrucciones bien escritas .

Todo hasta el paso 5.6, donde puede encontrar un pequeño inconveniente. Si ya se está ejecutando un agente SSH, podría recibir el siguiente mensaje de error cuando reinicie bash

Could not open a connection to your authentication agent

Si lo hace, use el siguiente comando para ver si se está ejecutando más de un proceso ssh-agent

ps aux | grep ssh

Si ve más de un servicio ssh-agent, deberá eliminar todos estos procesos. Use el comando kill de la siguiente manera (el PID será único en su computadora)

kill <PID>

Ejemplo:

kill 1074

Después de eliminar todos los procesos de ssh-agent, ejecute px aux | grep ssh nuevamente para asegurarse de que se hayan ido, luego reinicie Bash.

Voila, ahora deberías obtener algo como esto:

Initializing new SSH agent...
succeeded
Enter passphrase for /c/Users/username/.ssh/id_rsa:

Ahora puede continuar en el paso 5.7 y más allá.


me pasó el obstáculo, tyvm
Jason Fingar

Solo quería agregar que, en mi caso, uno de los elementos enumerados es el proceso grep con el que estamos haciendo la búsqueda, pero ya se eliminó después de su ejecución. Sin juego de palabras.
Ryan Mortensen


13

Para los usuarios de Windows , descubrí que cmd eval `ssh-agent -s`no funcionaba, pero usar git bash funcionó de maravilla eval `ssh-agent -s`; ssh-add KEY_LOCATIONy asegurarme de que el servicio de Windows "OpenSSH Key Management" no estuviera deshabilitado


12

Nota: esta es una respuesta a esta pregunta , que se ha fusionado con esta. Esa pregunta fue para Windows 7, lo que significa que mi respuesta fue para Cygwin / MSYS / MSYS2. Este parece para algunos Unix, donde no esperaría que el agente SSH necesite ser administrado de esta manera .

Esto ejecutará el agente SSH y se autenticará solo la primera vez que lo necesite , no cada vez que abra su terminal Bash. Se puede usar para cualquier programa que use SSH en general, incluidos ssh y scp. Solo agregue esto a /etc/profile.d/ssh-helper.sh:

ssh-auth() {
    # Start the SSH agent only if not running
    [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh

    # Identify the running SSH agent
    [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null

    # Authenticate (change key path or make a symlink if needed)
    [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add
}

# You can repeat this for other commands using SSH
git() { ssh-auth; command git "$@"; }


2
El proceso ssh-agent no parece estar asociado con el mismo terminal utilizado para ejecutarlo. Supongo ps -A | grep ssh-agento ps h -C ssh-agentdebería usarse en lugar deps | grep ssh-agent
alexis

1
Es posible que no se recomiende utilizar un guión en el nombre de la función. No sé por qué, pero lee esto . Por ejemplo, descubrí que echo ssh-auth | bashfallará.
alexis

1
Simplemente puedes solucionar esto un poco más. Simplemente verifique si se está ejecutando y asigne las variables env. Y luego agregue AddKeysToAgent yes(o use prompt) a su entrada de configuración ssh (use Host *para todos los Hosts). De esa manera, solo se le pedirá la contraseña SSH si realmente intenta conectarse, de lo contrario, se le podría pedir una contraseña para un simple git diffo git status.
ST-DDT

2
$HOME/.sshpodría ser más robusto que/home/$(whoami)/.ssh
Ari Sweedler

12

Tuve el mismo problema Ubuntuy las otras soluciones no me ayudaron. Finalmente me di cuenta de cuál era mi problema. Había creado mis sshclaves en la /root/.sshcarpeta, así que incluso cuando ejecuté ssh-addcomo root, no podía hacer su trabajo y seguía diciendo

Could not open a connection to your authentication agent.

Creé mis claves ssh públicas y privadas en la /home/myUsername/carpeta y usé

ssh-agent /bin/sh

entonces corrí

ssh-add /home/myUsername/.ssh/id_rsa

y el problema se resolvió de esta manera.

Nota: Para acceder a su repositorio, gitagregue su contraseña de git cuando cree sshclaves con ssh-keygen -t rsa -C "your git email here".


9

Use el parámetro -A cuando se conecte al servidor, por ejemplo:

ssh -A root@myhost

de la página del manual:

-A Enables forwarding of the authentication agent connection.  
   This can also be specified on a per-host basis in a configuration file.

   Agent forwarding should be enabled with caution.  Users with the ability to bypass file permissions on the remote host (for the agent's
   UNIX-domain socket) can access the local agent through the forwarded 
   connection.  An attacker cannot obtain key material from the agent,
   however they can perform operations on the keys that enable them to
   authenticate using the identities loaded into the agent.

¿Qué hace y por qué?
erikbwork

según la página man ... man ssh ... -A Habilita el reenvío de la conexión del agente de autenticación. Esto también se puede especificar por host en un archivo de configuración.
Scott Stensland

8

La solución básica para ejecutar ssh-agentse responde en muchas respuestas. Sin embargo, si se ejecuta ssh-agentmuchas veces (por cada terminal abierto o por inicio de sesión remoto) creará muchas copias que se ssh-agentejecutarán en la memoria. Las secuencias de comandos que se sugieren para evitar ese problema son largas y necesitan escribir y / o copiar archivos separados o necesitan escribir demasiadas cadenas en ~/.profileo ~/.schrc. Permítanme sugerir una solución simple de dos cadenas:

Para sh , bash , etc.

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

Para csh , tcsh , etc.

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`

Que hay aquí:

  • buscar el proceso ssh-agentpor nombre y por usuario actual
  • cree un archivo de script de shell apropiado llamando ssh-agenty ejecútelo ssh-agentsi no ssh-agentse encuentra el proceso de usuario actual
  • evaluar el script de shell creado que configura el entorno apropiado

No es necesario proteger el script de shell creado ~/.ssh-agent.tcsho el ~/.ssh-agent.shacceso de otros usuarios porque: la comunicación inicial ssh-agentse procesa a través de un socket protegido que no es accesible para otros usuarios, y en segundo lugar, otros usuarios pueden encontrar el ssh-agentsocket simple mediante archivos de enumeración en el /tmp/directorio. En cuanto al acceso al ssh-agentproceso, son las mismas cosas.



6

Lea la respuesta de @ cupcake para obtener explicaciones. Aquí solo trato de automatizar la solución.

Si usa el terminal Cygwin con BASH, agregue lo siguiente al archivo $ HOME / .bashrc. Esto solo inicia ssh-agent una vez en el primer terminal Bash y agrega las claves a ssh-agent. (No estoy seguro si esto es necesario en Linux)

###########################
# start ssh-agent for
# ssh authentication with github.com
###########################
SSH_AUTH_SOCK_FILE=/tmp/SSH_AUTH_SOCK.sh
if [ ! -e $SSH_AUTH_SOCK_FILE ]; then
    # need to find SSH_AUTH_SOCK again.
    # restarting is an easy option
    pkill ssh-agent
fi
# check if already running
SSH_AGENT_PID=`pgrep ssh-agent`
if [ "x$SSH_AGENT_PID" == "x" ]; then
#   echo "not running. starting"
    eval $(ssh-agent -s) > /dev/null
    rm -f $SSH_AUTH_SOCK_FILE
    echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > $SSH_AUTH_SOCK_FILE
    ssh-add $HOME/.ssh/github.com_id_rsa 2>&1 > /dev/null
#else
#   echo "already running"
fi
source $SSH_AUTH_SOCK_FILE

NO OLVIDE agregar sus claves correctas en el comando "ssh-add".


5

Tuve este problema, cuando comencé ssh-agent, cuando ya se estaba ejecutando. Se confunde Para ver si este es el caso, use

eval $(ssh-agent)

para ver si esto es lo mismo que pensabas que debería ser. En mi caso, fue diferente al que acabo de comenzar.

Para verificar si tiene más de un agente ssh ejecutándose, puede revisar:

ps -ef | grep ssh

2
Creo que correr eval $(ssh-agent)se supone que crea un nuevo agente con un PID diferente cada vez, aunque podría estar equivocado.

4

Tuve un problema similar cuando estaba tratando de hacer que esto funcione en Windows para conectarse a stash a través de ssh

Aquí está la solución que funcionó para mí.

  1. Resulta que estaba ejecutando Pageant ssh agent en mi cuadro de Windows; verificaría lo que está ejecutando. Sospecho que es un concurso, ya que viene por defecto con Putty y winScp

  2. Ssh-add no funciona desde la línea de comandos con este tipo de agente

  3. Debe agregar la clave privada a través de la ventana de la interfaz de usuario del concurso, que puede obtener haciendo doble clic en el icono del concurso en la barra de tareas (una vez que se inicia).

  4. Antes de agregar la clave al concurso, debe convertirla al formato PPK. Las instrucciones completas están disponibles aquí Cómo convertir la clave SSH al formato ppk

  5. Eso es. Una vez que cargué mi clave para guardar, pude usar SourceTree para crear un repositorio local y clonar el control remoto.

Espero que esto ayude...


3

Resolví el error forzando la detención (eliminación) de los procesos de git (agente ssh), luego desinstalando Git y luego instalando Git nuevamente.


2
Sospecho que todo lo que tenía que hacer era matar cualquier proceso de agente existente, luego reiniciar uno, en lugar de tener que reinstalar Git.

3

Usando Git Bash en Win8.1E, mi resolución fue la siguiente:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa

¿Por qué es necesario salir a /dev/null? Su respuesta básicamente hace exactamente lo mismo que esta .

Además, me gustaría señalar que esa ~/.ssh/id_rsaes la clave predeterminada, por lo que no debería tener que especificar ssh-add ~/.ssh/id_rsa, solo ssh-adddebería funcionar.

Probé tu solución en este mismo entorno @Cupcake, no funciona. Tampoco entiendo por qué esta es la respuesta, pero a menos que lo haya hecho de esta manera, nunca funcionó.
nighliber

3

Si está utilizando Putty, quizás necesite configurar la opción "Conexión / SSH / Auth / Permitir reenvío de agente" a "verdadero".

ingrese la descripción de la imagen aquí


3

Esto funcionó para mí.

En la ventana CMD, escriba el siguiente comando:

cd path-to-Git/bin # (for example,cd C:\Program Files\Git\bin)
bash
exec ssh-agent bash
ssh-add path/to/.ssh/id_rsa

3

Para bash integrado en Windows 10, agregué esto a .bash_profile:

if [ -z $SSH_AUTH_SOCK ]; then
    if [ -r ~/.ssh/env ]; then
            source ~/.ssh/env
            if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then
                    rm ~/.ssh/env
                    unset SSH_AUTH_SOCK
            fi
    fi
fi

if [ -z $SSH_AUTH_SOCK ]; then
    ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env
    chmod 600 ~/.ssh/env
    source ~/.ssh/env > /dev/null 2>&1
fi

1
No sé por qué pegas tanto texto si pudieras haber dicho que llamaras $(ssh-agent -s)para configurar el entorno del agente.
erikbwork

1
Esto funcionó para mí cuando lo usé por primera vez. Pero después de reiniciar el sistema, en realidad causó que el problema empeorara. Con ssh ya no funciona en absoluto . No recomendado.
yspreen
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.