ssh - open - No se pudo abrir una conexión con su agente de autenticación
ssh-add (30)
Me estoy encontrando 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.
Traté de agregar las claves y me aparece este error a continuación:
$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.
En lugar de usar $ ssh-agent -s usé $ eval
ssh-agent -s
para resolver> este problema.Esto es lo que realicé paso a paso (paso 2 en adelante en GitBash):
Limpié mi carpeta .ssh en C: / user / .ssh /
Generado una nueva clave SSH
$ ssh-keygen -t rsa -b 4096 -C "[email protected]"Verifique si ya se está ejecutando alguna identificación de proceso (agente ssh).
$ ps aux | grep ssh(Opcional) Si encuentra alguno en el paso 3, elimínelos
$ kill <pids>Comenzó el agente ssh
$ eval `ssh-agent -s`Se agregó la clave ssh generada en el paso 2 al agente ssh
$ ssh-add ~ / .ssh / id_rsa
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 ser para algunos Unix, donde no esperaría que el agente SSH necesitara ser administrado así.
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 en sí 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 "$@"; }
No se pudo abrir una conexión con su agente de autenticación
Para resolver este error:
intento:
$ eval `ssh-agent -s`
tcsh:
$ eval `ssh-agent -c`
Luego usa ssh-add
como lo harías normalmente.
Buen dato:
Siempre me olvidé de qué escribir para los comandos ssh-agent anteriores, así que creé un alias en mi archivo .bashrc
como este:
alias ssh-agent-cyg=''eval `ssh-agent -s`''
Ahora, en lugar de usar ssh-agent
, puedo usar ssh-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 la corrección:
¿Comenzó ssh-agent
?
Es posible que deba iniciar ssh-agent
antes de ejecutar el comando ssh-add
:
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 utilizar una variante del comando, como las que se enumeran en las otras respuestas .
Vea las siguientes respuestas:
- ssh-add se queja: no se pudo abrir una conexión con su agente de autenticación
- Git push requiere nombre de usuario y contraseña (contiene instrucciones detalladas sobre cómo usar ssh-agent)
- Cómo ejecutar (git / ssh) agente de autenticación? .
- No se pudo abrir una conexión con su agente de autenticación
Para iniciar ssh-agent automáticamente y permitir que una sola instancia funcione en varias ventanas de la consola, consulte Iniciar ssh-agent al iniciar sesión .
¿Por qué tenemos que usar eval
lugar de simplemente ssh-agent
?
Para averiguar por qué, vea la respuesta de Robin Green .
Claves públicas vs privadas
Además, cada vez que uso ssh-add
, siempre le agrego claves privadas. El archivo ~/.ssh/id_rsa.pub
parece una clave pública, no estoy seguro de si eso funcionará. ¿Tienes un archivo ~/.ssh/id_rsa
? Si lo abre en un editor de texto, ¿dice que es una clave privada?
MsysGit o Cygwin
Si está usando Msysgit o Cygwin, puede encontrar un buen tutorial en SSH-Agent en msysgit y cygwin y bash :
Agregue un archivo llamado
.bashrc
a su carpeta de inicio.Abra el archivo y pegue:
#!/bin/bash eval `ssh-agent -s` ssh-add
Esto supone que su clave está en la ubicación convencional
~/.ssh/id_rsa
. Si no es así, incluya una ruta completa después del comandossh-add
.Agregar o crear archivo
~/.ssh/config
con los contenidosForwardAgent yes
En el tutorial original, el
ForwardAgent
esYes
, pero es un error tipográfico. Use todas las minúsculas o obtendrá errores.Reinicia Msysgit. Le pedirá que ingrese su frase de contraseña una vez, y eso es todo (hasta que finalice la sesión, o se mata a su agente de ssh).
Mac OS X
Si no desea iniciar un nuevo ssh-agent 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 llave al llavero Mac OS:
ssh-add -K ~/.ssh/id_rsa
Simple como eso.
Acabo de hacer que esto funcione. Abra su archivo ~/.ssh/config
.
Agregue lo siguiente-
Host github.com
IdentityFile ~/.ssh/github_rsa
La página que me dio la pista Configurar SSH para Git dijo que la sangría de espacio único es importante ... aunque tenía una configuración aquí de Heroku que no tenía ese espacio y funcionaba correctamente.
Amplificar en la respuesta de n3o para Windows 7 ...
Mi problema era, de hecho, que algunas variables de entorno requeridas no estaban establecidas, y n3o es correcto que ssh-agent te dice cómo establecer esas variables de entorno, pero en realidad no las establece.
Como Windows no le permite hacer "eval", esto es lo que debe hacer:
Redirigir la salida de ssh-agent a un archivo por lotes con
ssh-agent > temp.bat
Ahora usa un editor de texto como el Bloc de notas para editar temp.bat. Para cada una de las dos primeras líneas: - Inserta la palabra "establecer" 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. Tu temp.bat debería verse más o menos así:
set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608
Ejecute temp.bat. Esto configurará las variables de entorno necesarias para que ssh-add funcione.
Déjame ofrecerte otra solución. Si acaba de instalar Git 1.8.2.2 o menos, 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 aparecer 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 de 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 haber eliminado todos los procesos de ssh-agent, ejecute px aux | grep ssh comando 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á.
El siguiente comando funcionó para mí. Estoy usando CentOS.
exec ssh-agent bash
En Windows 10 probé todas las respuestas que figuran aquí, pero ninguna de ellas parecía funcionar. De hecho, dan una pista. Para resolver un problema, simplemente necesitas 3 comandos. La idea de este problema es que ssh-add necesita establecer las variables de entorno SSH_AUTH_SOCK y SSH_AGENT_PID con la ruta actual del archivo sock de ssh-agent 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" desde el 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 para conectar el agente ssh.
En mi caso, mi firewall de Comodo había puesto a prueba el agente de ssh. Una vez que desactivé el sandboxing, pude clonar el repositorio.
FYI, estoy usando el firewall de Comodo en Windows 7.
Enfrenté el mismo problema para Linux, y esto es lo que hice:
Básicamente, el comando ssh-agent inicia el agente, pero realmente no establece las variables de entorno para que se ejecute. Simplemente emite esas variables al shell.
Necesitas:
eval `ssh-agent`
y luego hacer ssh-add. Consulte No se pudo abrir una conexión con su agente de autenticación .
Esto funcionó para mí.
En la ventana de 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
Incluso estaba obteniendo "No se pudo abrir una conexión con su agente de autenticación". al ejecutar el comando al generar y agregar la clave SSH: ssh-add ~/.ssh/id_rsa
. Lo resolví deteniendo las múltiples instancias de ssh-agent
ejecutan en mi máquina y luego desinstalé el Git del panel de control en mi máquina de Windows y luego volví a instalar Git y las cosas estaban funcionando ahora.
Intente con los siguientes pasos:
1) Abre Git Bash y ejecuta: cd ~/.ssh
2) Intenta ejecutar el agente: eval $(ssh-agent)
3) En este momento, puede ejecutar el siguiente comando: ssh-add -l
La solución básica para ejecutar ssh-agent
se responde en muchas respuestas. Sin embargo, ejecutar ssh-agent
muchas veces (por cada terminal abierto o por inicio de sesión remoto) creará muchas copias de ssh-agent
ejecutándose en la memoria. Los scripts que se sugieren para evitar ese problema son largos y necesitan escribir y / o copiar archivos separados o necesitan escribir demasiadas cadenas en ~/.profile
o ~/.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-agent
por nombre y por usuario actual - cree un archivo de script de shell apropiado llamando a
ssh-agent
y ejecutessh-agent
si no se encuentra un proceso de usuario actual dessh-agent
- evaluar el guión de shell creado que configura el entorno apropiado
No es necesario proteger el script de shell creado ~/.ssh-agent.tcsh
o ~/.ssh-agent.sh
de otro acceso de usuarios porque: la primera comunicación con ssh-agent
se procesa a través de un socket protegido al que no se puede acceder otros usuarios, y en el segundo, otros usuarios pueden encontrar el socket ssh-agent
simple mediante los archivos de enumeración en el directorio /tmp/
. En cuanto al acceso al proceso de ssh-agent
, es lo mismo.
Lee la respuesta de @bigcake para obtener explicaciones. Aquí solo intento 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 requerido 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".
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
Probé las otras soluciones sin éxito. 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
Pruebe lo siguiente:
ssh-agent sh -c ''ssh-add && git push heroku master''
Resolví el error al forzar la detención (muerte) de los procesos de git (agente ssh), luego desinstalé Git y luego volví a instalar Git.
Si está usando Putty, quizás deba establecer la opción "Conexión / SSH / Auth / Permitir reenvío de agente" a "verdadero".
Si sigues estas instrucciones, tu problema estaría resuelto.
Si está en una máquina Mac o Linux, escriba:
eval "$(ssh-agent -s)"
Si está en una máquina con Windows, escriba:
ssh-agent -s
También verifique su URL remota. use git @ github ... en lugar de https: // proptocol
ver https://.com/a/33928364/551811
Tuve este problema cuando comencé ssh-agent, cuando ya estaba en ejecución. Se confunde Para ver si este es el caso, use
eval $(ssh-agent)
para ver si esto es igual a lo que pensaste que debería ser. En mi caso, fue diferente al que acabo de comenzar.
Para verificar aún más si tiene más de un agente ssh-en ejecución, puede revisar:
ps -ef | grep ssh
Tuve un problema similar cuando intentaba hacer que esto funcionara en Windows para conectarme a escondidas a través de ssh
Aquí está la solución que funcionó para mí.
Resulta que estaba ejecutando el agente de shan de Pageant en mi caja de Windows. Verificaría qué estás ejecutando. Sospecho que es un concurso ya que viene por defecto con Putty y winScp
El ssh-add no funciona desde la línea de comandos con este tipo de agente
Debe agregar la clave privada a través de la ventana de interfaz de usuario del concurso que puede obtener al configurar el icono del concurso en la barra de tareas (una vez que se haya iniciado).
Antes de agregar la clave al concurso, debe convertirlo al formato PPK. Las instrucciones completas están disponibles aquí Cómo convertir la clave SSH al formato ppk
Eso es. Una vez que cargué mi clave para esconderme, pude usar SourceTree para crear un repositorio local y clonar el control remoto.
Espero que esto ayude...
Una cosa que encontré fue que la eval
no 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 logré encontrar para eso (desde aquí ):
chgrp Users id_rsa
tanto como
chmod 600 id_rsa
finalmente pude usar:
ssh-agent ssh-add id_rsa
Usando Git Bash en Win8.1E, mi resolución fue la siguiente:
eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa
Use el parámetro -A cuando se conecta al servidor, ejemplo:
ssh -A root@myhost
de la página man:
-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.
ssh-add y ssh (suponiendo que esté utilizando las implementaciones de openssh) requieren una variable de entorno para saber cómo hablar 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ó de manera incorrecta, ni ssh-add ni ssh verán esa variable de entorno establecida (porque la variable de entorno se establece localmente en el comando indica que está configurado).
No dices qué versión de ssh estás usando, pero si usas cygwin, puedes usar esta receta de SSH Agent 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 solicitud de comando que abra (que es subóptima si abre varias solicitudes de comando en una sesión, pero al menos debería funcionar).