Impossible d'ouvrir une connexion avec votre agent d'authentification

1607

Je rencontre cette erreur 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.

J'ai essayé d'ajouter les clés et j'obtiens cette erreur ci-dessous:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.
Danny Dai Smith
la source
26
Question: une fois que vous avez parcouru CHAQUE réponse sur cette page, et aucune d'entre elles ne fonctionne. Que pouvez-vous faire ensuite?
Brandon Bertelsen
8
@BrandonBertelsen Essayez celui-ci: $ ssh-agent /bin/sh et $ ssh-add $yourkey
shyam
@BrandonBertelsen Ensuite, vous devez utiliser git config --listpour voir si vous avez défini credential.helper- si vous l'avez, vous devez supprimer ce paramètre, car l'aide n'est pas utile.
yoyo

Réponses:

2386

Avez-vous commencé ssh-agent?

Vous devrez peut-être démarrer ssh-agentavant d'exécuter la ssh-addcommande:

eval `ssh-agent -s`
ssh-add

Notez que cela démarrera l'agent pour msysgit Bash sous Windows . Si vous utilisez un shell ou un système d'exploitation différent, vous devrez peut-être utiliser une variante de la commande, comme celles répertoriées dans les autres réponses .

Voir les réponses suivantes:

  1. ssh-add se plaint: impossible d'ouvrir une connexion avec votre agent d'authentification
  2. Git push nécessite un nom d'utilisateur et un mot de passe (contient des instructions détaillées sur la façon d'utiliser ssh-agent)
  3. Comment exécuter l'agent d'authentification (git / ssh)? .
  4. Impossible d'ouvrir une connexion avec votre agent d'authentification

Pour démarrer automatiquement ssh-agent et autoriser une seule instance à fonctionner dans plusieurs fenêtres de console, voir Démarrer ssh-agent à la connexion .

Pourquoi devons-nous utiliser evalau lieu de simplement ssh-agent?

Pour savoir pourquoi, voir la réponse de Robin Green .

Clés publiques vs clés privées

De plus, chaque fois que j'utilise ssh-add, j'y ajoute toujours des clés privées. Le fichier ~/.ssh/id_rsa.pubressemble à une clé publique, je ne sais pas si cela fonctionnera. Avez-vous un ~/.ssh/id_rsadossier? Si vous l'ouvrez dans un éditeur de texte, cela signifie-t-il que c'est une clé privée?

Communauté
la source
18
@xtian Je ne suis pas sûr de comprendre le problème. Je ne connais pas les détails exacts, mais je suppose que la clé privée n'est jamais envoyée sur le réseau. Je pense ssh-addque déchiffre simplement une clé privée chiffrée sur la machine hôte, afin qu'elle puisse être utilisée localement ... elle n'est jamais envoyée à personne . Je suppose que seules les clés publiques sont envoyées sur un réseau. Ma compréhension est-elle incorrecte?
6
Tu es trop gentil Cupcake. Vous avez absolument raison. Ma faute. ex ici ; ssh-add ajoute la clé privée pour que l'agent ssh de l'utilisateur (processus en cours) puisse agir au nom du client / hôte avec le serveur acceptant les clés rsa-que ce soit. Décidément. Je ne sais pas ce qui m'a rendu si excité.
xtian
22
Je suis curieux de savoir pourquoi ça eval ssh-agent -smarche, mais ssh-agentpas tout seul.
DanielM
13
@DanielM: SSH a besoin de deux choses pour utiliser ssh-agent: une instance de ssh-agent s'exécutant en arrière-plan et un ensemble de variables d'environnement qui indique à SSH quel socket il doit utiliser pour se connecter à l'agent ( SSH_AUTH_SOCKIIRC). Si vous venez de lancer, ssh-agentl'agent démarrera, mais SSH n'aura aucune idée où le trouver.
Vanessa Phipps du
4
Merci d'avoir répondu cependant. Je viens de remarquer que vous avez utilisé backquote dans la commande. Je suis tellement confus pourquoi le backquote (`) fonctionne pour la commande eval mais pas le simple / double quote (',") sur mon shell bash?
Weishi Zeng
540

J'ai essayé les autres solutions en vain. J'ai fait plus de recherches et j'ai constaté que la commande suivante fonctionnait. J'utilise Windows 7 et Git Bash .

eval $(ssh-agent)

Plus d'informations sur: https://coderwall.com/p/rdi_wq

Victor Alves
la source
14
Fonctionne également sur Windows 8.
Andreas Rudolph
J'utilise également Windows 7 et Git Bash, et ma réponse fonctionne très bien. C'est cool que vous puissiez aussi le faire de cette façon aussi.
2
Génial !! Fonctionne également avec Windows 10.
NitinM
1
A travaillé sur Manjaro
code_flow
1
$ eval "$ (ssh-agent -s)" a fonctionné pour moi sur Windows 10
Andrew Anderson
262

La commande suivante a fonctionné pour moi. J'utilise CentOS.

exec ssh-agent bash
mianjee
la source
3
Merci, cela a fonctionné pour moi, j'ai couru 'exec ssh-agent zsh' pour mon shell.
jasonmcclurg
2
Selon cette "réponse" supprimée , cela fonctionne également sur Amazon Linux AMI. Je suppose que c'est une solution Unix / Linux / * nix.
4
Je me suis précipité dans un conteneur docker et ssh-add my.id_rsaj'échouerais sur moi. Mais a exec ssh-agent zshdonné un environnement où je pouvais ssh-addsans problème. Et je suis à l'intérieur de mon conteneur docker :)
markuz-gj
Quelqu'un peut-il expliquer brièvement quel pourrait être le problème? Merci :) Cela a également fonctionné sur mon Ubuntu 14.04.
harkirat1892
travaillé sur raspbian aussi
mega_creamery
215

MsysGit ou Cygwin

Si vous utilisez Msysgit ou Cygwin, vous pouvez trouver un bon tutoriel sur SSH-Agent dans msysgit et cygwin et bash :

  1. Ajoutez un fichier appelé .bashrcdans votre dossier de départ.

  2. Ouvrez le fichier et collez-le:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
  3. Cela suppose que votre clé se trouve à l' ~/.ssh/id_rsaemplacement conventionnel . Si ce n'est pas le cas, incluez un chemin complet après la ssh-addcommande.

  4. Ajouter ou créer un fichier ~/.ssh/configavec le contenu

    ForwardAgent yes
    

    Dans le tutoriel d'origine, le ForwardAgentparamètre est Yes, mais c'est une faute de frappe. Utilisez tout en minuscules ou vous obtiendrez des erreurs.

  5. Redémarrez Msysgit. Il vous demandera d'entrer une fois votre phrase secrète, et c'est tout (jusqu'à ce que vous mettiez fin à la session ou que votre agent ssh soit tué.)

Mac OS X

Si vous ne voulez pas démarrer un nouvel agent ssh à chaque fois que vous ouvrez un terminal, consultez le trousseau . Je suis sur un Mac maintenant, j'ai donc utilisé le tutoriel ssh-agent avec zsh et porte-clés sur Mac OS X pour le configurer, mais je suis sûr qu'une recherche Google contiendra de nombreuses informations pour Windows.

Mise à jour : Une meilleure solution sur Mac consiste à ajouter votre clé au trousseau Mac OS:

ssh-add -K ~/.ssh/id_rsa

Aussi simple que cela.

RobW
la source
1
FYI: fusionné de stackoverflow.com/questions/4083079/…
Shog9
1
Lorsque je fais, eval `ssh-agent -s`le processus ne s'arrête pas lorsque je quitte cygwin.
Kiril
Existe-t-il un moyen de configurer la configuration pour Windows / gitbash afin que vous n'ayez pas à le faire à chaque fois?
mix3d
4
Cela devrait être le ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)cas - sinon un nouvel agent ssh est démarré à chaque fois. Tué ma machine de temps en temps lorsque l'utilisateur avait des tâches cron.
déchiquetage
3
ForwardAgent yesn'est pas nécessaire et constitue un risque de sécurité non théorique s'il est défini pour un serveur non approuvé. L'accès local à votre agent clé doit fonctionner quel que soit ce paramètre.
SeldomNeedy
208

Impossible d'ouvrir une connexion avec votre agent d'authentification

Pour résoudre cette erreur:

frapper:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

Ensuite, utilisez ssh-addcomme vous le feriez normalement.


Astuce:

J'oubliais toujours quoi taper pour les commandes ssh-agent ci-dessus, j'ai donc créé un alias dans mon .bashrcfichier comme ceci:

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

Maintenant, au lieu d'utiliser ssh-agent , je peux utiliserssh-agent-cyg

Par exemple

$ 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

Source d'origine du correctif:

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

Chris Snow
la source
3
vous devrez exécuter la evalcommande à chaque fois que vous l'auriez précédemment exécutée ssh-agent. J'utilise un alias maintenant, voir la réponse mise à jour pour savoir comment je fais cela.
Chris Snow
1
FYI: fusionné de stackoverflow.com/questions/4083079/…
Shog9
J'ai également dû utiliser la spécification ssh au lieu de https (voir help.github.com/articles/changing-a-remote-s-url )
RunHolt
1
Vous monsieur, vous êtes génial. Merci. ** Je fait face au même problème lors du clonage d' un repo bitbucket, je avais déjà une configuration clé ssh, mais je continuais à l' erreur: fatal: Could not read from remote repository..
Nishant Ghodke
A travaillé pour moi sur Windows 10 et
Git
116

J'ai rencontré le même problème pour Linux, et voici ce que j'ai fait:

Fondamentalement, la commande ssh-agent démarre l'agent, mais elle ne définit pas vraiment les variables d'environnement pour qu'il s'exécute. Il sort simplement ces variables dans le shell.

Tu dois:

eval `ssh-agent`

puis faites ssh-add. Voir Impossible d'ouvrir une connexion à votre agent d'authentification .

n3o
la source
1
FYI: fusionné de stackoverflow.com/questions/4083079/…
Shog9
A également fonctionné pour moi tout en ayant des problèmes avec boot2docker sous Windows.
Veve
C'est ce qu'il m'a fallu.
Tom
115

ssh-add et ssh (en supposant que vous utilisez les implémentations openssh) nécessitent une variable d'environnement pour savoir comment parler à l'agent ssh. Si vous avez démarré l'agent dans une fenêtre d'invite de commandes différente de celle que vous utilisez maintenant, ou si vous l'avez mal démarré, ni ssh-add ni ssh ne verront cet ensemble de variables d'environnement (car la variable d'environnement est définie localement sur la commande invite, il est installé).

Vous ne dites pas quelle version de ssh vous utilisez, mais si vous utilisez cygwin, vous pouvez utiliser cette recette de SSH Agent sur 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

Cela démarrera automatiquement un agent pour chaque nouvelle fenêtre d'invite de commandes que vous ouvrez (ce qui n'est pas optimal si vous ouvrez plusieurs invites de commande en une seule session, mais au moins cela devrait fonctionner).

Robin Green
la source
1
FYI: fusionné de stackoverflow.com/questions/4083079/…
Shog9
9
J'étais lié ici à partir d'une autre question SO. Puis-je demander pourquoi il est nécessaire d'ajouter cela au fichier de configuration Bash? Sur ma machine, tout ce que je dois faire est de fonctionner eval $(ssh-agent)et je peux utiliser ssh sans mot de passe pour chaque nouvelle fenêtre de terminal.
Andy J
Cela ne devrait pas être possible, sauf si vous lancez de nouveaux terminaux à partir de ce terminal.
Robin Green,
114

Courir

ssh-agent bash
ssh-add

Pour obtenir plus de détails, vous pouvez rechercher

ssh-agent

ou courir

man ssh-agent
bp zhang
la source
7
Je recommanderais que si vous travaillez avec git bash sur Windows, essayez ceci.
Neeraj Sewani
@ neer17 cela m'a permis d'utiliser ssh-copy-idsur ubuntu. Je ne sais pas pourquoi je n'ai pas pu ajouter la clé sans utiliser ssh-agentpour lancer bash.
SomeGuyOnAComputer
2
C'est celui pour Windows! (testé sur W10pro build 1809 et git 2.21.0)
Alfabravo
1
J'utilise ZSH et cela fonctionne pour moi:ssh-agent zsh; ssh-add
sirboderafael
97

Essayez les étapes suivantes:

1) Ouvrez Git Bash et lancez: cd ~/.ssh

2) Essayez d'exécuter l'agent: eval $(ssh-agent)

3) Pour le moment, vous pouvez exécuter la commande suivante: ssh-add -l

ChechoroArtem
la source
9
C'est la seule solution ici qui a fonctionné pour moi (sur Windows 7). J'ai d'abord utilisé la ps aux | grep sshet la killcommande dans la réponse de Rick pour tuer les agents. Après cela a ssh-addfonctionné sans le commutateur -l (l'utilisation de -l a donné une erreur). eval 'ssh-agent'comme dans la réponse de Rick n'a pas fonctionné, j'ai dû utiliser eval $(ssh-agent)comme dans la réponse de Chechoro ici.
Frug
6
+1 J'ai eu exactement le même problème que OP (Windows 7) et c'est la seule solution qui a fonctionné pour moi.
Weblurk
1
FYI: fusionné de stackoverflow.com/questions/4083079/…
Shog9
2
@Frug Ce sont des astuces, pas des apostrophes; dans un script shell qui signifie exécuter ce qui est contenu à l'intérieur. $(ssh-agent)est équivalent `ssh-agent`mais plus lisible.
MM
96

Au lieu d'utiliser $ ssh-agent -s, j'ai utilisé $ eval `ssh-agent -s`pour résoudre ce problème.

Voici ce que j'ai effectué étape par étape (étape 2 à partir de GitBash):

  1. Nettoyé mon dossier .ssh à C:\user\<username>\.ssh\
  2. Généré une nouvelle clé SSH
    $ ssh-keygen -t rsa -b 4096 -C "[email protected]"
  3. Vérifiez si un identifiant de processus (agent ssh) est déjà en cours d'exécution.
    $ ps aux | grep ssh
  4. (Facultatif) Si vous en trouvez à l'étape 3, tuez ceux
    $ kill <pids>
  5. Démarré l'agent ssh
    $ eval `ssh-agent -s`
  6. Ajout de la clé ssh générée à l'étape 2 à l'agent ssh
    $ ssh-add ~/.ssh/id_rsa
vinsinraw
la source
3
'eval' n'est pas reconnu comme une commande interne ou externe, un programme exploitable ou un fichier de commandes.
Chutipong Roobklom
Vous pouvez simplement redémarrer l'agent par eval ssh-agent -set ajouter une clé plus ancienne en utilisant ssh-add ~ / .ssh / id_rsa. Si vous générez une nouvelle clé SSH, vous devrez mettre à jour cette clé dans tous vos services tels que github, bitbucket, etc.
Mohit Satish Pawar
Existe-t-il un moyen de faire survivre le redémarrage de Windows? Après le redémarrage, cela ne fonctionne pas jusqu'à ce que je lance à nouveau "eval ssh-agent -s" et "ssh-add ~ / .ssh / id_rsa".
Michal Vician
1
après une longue recherche, c'est la solution qui a fonctionné
Sujit.Warrier
Grande explication!
avivamg
56

Dans Windows 10, j'ai essayé toutes les réponses répertoriées ici, mais aucune ne semblait fonctionner. En fait, ils donnent un indice. Pour résoudre un problème, vous avez simplement besoin de 3 commandes. L'idée de ce problème est que ssh-add a besoin que les variables d'environnement SSH_AUTH_SOCK et SSH_AGENT_PID soient définies avec le chemin du fichier sock de l'agent ssh et le numéro pid actuels.

ssh-agent -s > temp.txt

Cela sauvera la sortie de ssh-agent dans un fichier. Le contenu du fichier texte ressemblera à ceci:

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

Copiez quelque chose comme "/tmp/ssh-kjmxRb2764/agent.2764" à partir du fichier texte et exécutez la commande suivante directement dans la console:

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

Copiez quelque chose comme "3044" à partir du fichier texte et exécutez la commande suivante directement dans la console:

set SSH_AGENT_PID=3044

Maintenant, lorsque les variables d'environnement (SSH_AUTH_SOCK et SSH_AGENT_PID) sont définies pour la session de console actuelle, exécutez votre commande ssh-add et il ne manquera plus de se connecter à l'agent ssh.

DANGER BIOLOGIQUE
la source
2
Je vous remercie! C'était exactement ce dont j'avais besoin.
2015 isochrone
6
Non, toujours pareil.
Jaskey
3
Ces étapes sont les mêmes que pour faire 'eval $ (ssh-agent)'
K.Nicholas
2
Fixé sur mon Windows 10! Je vous remercie!
ntl
1
Cela m'a en fait aidé à sauver le problème sur Linux ... juste besoin de le remplacer setparexport
greg hor
30

Une chose que j'ai rencontrée est que cela evaln'a pas fonctionné pour moi en utilisant Cygwin, ce qui a fonctionné pour moi ssh-agent ssh-add id_rsa.

Après cela, je suis tombé sur un problème que ma clé privée était trop ouverte, la solution que j'ai réussi à trouver pour cela (à partir d' ici ):

chgrp Users id_rsa

aussi bien que

chmod 600 id_rsa

enfin j'ai pu utiliser:

ssh-agent ssh-add id_rsa
Vnge
la source
Avez - vous utilisé eval `ssh-agent`, avec les accents graves `autour ssh-agent, comme indiqué dans ma réponse ? Cela a très bien fonctionné pour moi à Cygwin. Vous semblez avoir raison, cela ssh-agent ssh-addfonctionne également, au moins dans le msysgit Bash. Cependant, notez qu'il id_rsas'agit de la clé par défaut utilisée, vous n'avez donc pas besoin de la spécifier avec ssh-agent ssh-add id_rsa.
Je crois que j'avais utilisé les backticks, mais pour moi toujours pas de dés
Vnge
1
OMG VOUS AVEZ RÉSOLU MES FRUSTATIONS DE QUELQUES HEURES. Merci!
Chee Loong Bientôt
Cette réponse a fonctionné pour moi dans bash.
Lsakurifaisu
27

Pour amplifier la réponse de n3o pour Windows 7 ...

Mon problème était en effet que certaines variables d'environnement requises n'étaient pas définies, et n3o est correct que ssh-agent vous indique comment définir ces variables d'environnement, mais ne les définit pas réellement.

Étant donné que Windows ne vous permet pas de faire "eval", voici ce qu'il faut faire à la place:

Redirigez la sortie de ssh-agent vers un fichier batch avec

ssh-agent > temp.bat

Utilisez maintenant un éditeur de texte tel que le Bloc-notes pour modifier temp.bat. Pour chacune des deux premières lignes: - Insérez le mot "set" et un espace au début de la ligne. - Supprimez le premier point-virgule et tout ce qui suit.

Supprimez maintenant la troisième ligne. Votre temp.bat devrait ressembler à ceci:

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

Exécutez temp.bat. Cela définira les variables d'environnement nécessaires au fonctionnement de ssh-add.

Steve Saporta
la source
FYI: fusionné de stackoverflow.com/questions/4083079/…
Shog9
Je reçois toujours Could not open a connection to your authentication agent.lors de l'exécution de ssh-add dans Win10 PowerShell.
Kebman
19

Je viens de faire fonctionner ça. Ouvrez votre~/.ssh/config dossier.

Ajoutez ce qui suit-

Host github.com
 IdentityFile ~/.ssh/github_rsa

La page qui m'a donné l'indication Configurer SSH pour Git a dit que l'indentation d'espace unique est importante ... bien que j'aie eu ici une configuration de Heroku qui n'avait pas cet espace et fonctionne correctement.

Paul Becotte
la source
1
Cela n'aide pas à saisir la phrase secrète de la clé SSH.
alesch
1
Si vous ne souhaitez pas saisir la phrase secrète, créez une clé sans celle-ci. Il ne sert à rien d'avoir une phrase secrète si vous allez simplement la stocker dans votre script de toute façon.
Paul Becotte
C'est tout l'intérêt d'utiliser ssh-agent. Le mot de passe de vos clés est stocké dans un trousseau sécurisé, géré par ssh-agent.
alesch
C'est la meilleure réponse pour moi ici. A eu beaucoup de problèmes avec ssh-agent démarrant des milliers de fois dans Windows 7 et ce piège mortel n'a pas fait l'affaire. Cela ne me dérange pas de ne pas avoir de phrase secrète sur mon ordinateur personnel à la maison.
Fleshgrinder
18

Si vous suivez ces instructions, votre problème sera résolu.

Si vous êtes sur une machine Mac ou Linux, tapez:

eval "$(ssh-agent -s)"

Si vous êtes sur une machine Windows, tapez:

ssh-agent -s
Fahim Boron
la source
13

Permettez-moi de vous proposer une autre solution. Si vous venez d'installer Git 1.8.2.2 ou environ, et que vous souhaitez activer SSH, suivez les instructions bien écrites .

Tout à l'étape 5.6 où vous pourriez rencontrer un léger accroc. Si un agent SSH est déjà en cours d'exécution, vous pouvez obtenir le message d'erreur suivant lorsque vous redémarrez bash

Could not open a connection to your authentication agent

Si vous le faites, utilisez la commande suivante pour voir si plusieurs processus ssh-agent sont en cours d'exécution

ps aux | grep ssh

Si vous voyez plus d'un service ssh-agent, vous devrez tuer tous ces processus. Utilisez la commande kill comme suit (le PID sera unique sur votre ordinateur)

kill <PID>

Exemple:

kill 1074

Après avoir supprimé tous les processus ssh-agent, exécutez le px aux | grep ssh à nouveau pour être sûr qu'ils ont disparu, puis redémarrez Bash.

Voila, vous devriez maintenant obtenir quelque chose comme ça:

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

Vous pouvez maintenant continuer à l'étape 5.7 et au-delà.

Meule
la source
m'a fait passer le barrage routier, tyvm
Jason Fingar
Je voulais juste ajouter que dans mon cas, l'un des éléments répertoriés est le processus grep avec lequel nous effectuons la recherche, mais il est déjà tué après son exécution. Sans jeu de mots.
Ryan Mortensen
FYI: fusionné de stackoverflow.com/questions/4083079/…
Shog9
13

Pour les utilisateurs de fenêtres, j'ai trouvé que cmd eval `ssh-agent -s`ne fonctionnait pas, mais utiliser git bash était un régal eval `ssh-agent -s`; ssh-add KEY_LOCATION, et m'assurer que le service Windows "OpenSSH Key Management" n'était pas désactivé

aqm
la source
12

Remarque: il s'agit d'une réponse à cette question , qui a été fusionnée avec celle-ci. Cette question était pour Windows 7, ce qui signifie que ma réponse était pour Cygwin / MSYS / MSYS2. Celui-ci semble pour certains Unix, où je ne m'attendrais pas à ce que l'agent SSH soit géré comme ça .

Cela exécutera l'agent SSH et ne s'authentifiera que la première fois que vous en aurez besoin , pas à chaque fois que vous ouvrirez votre terminal Bash. Il peut être utilisé pour tout programme utilisant SSH en général, y compris ssh lui-même et scp. Ajoutez simplement ceci à /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 "$@"; }
Renato Silva
la source
1
FYI: fusionné de stackoverflow.com/questions/4083079/…
Shog9
2
Le processus ssh-agent ne semble pas être associé au même terminal utilisé pour l'exécuter. Je suppose ps -A | grep ssh-agentou ps h -C ssh-agentdevrait être utilisé à la place deps | grep ssh-agent
alexis
1
L'utilisation d'un trait d'union dans le nom de la fonction peut ne pas être recommandée. Je ne sais pas pourquoi, mais lisez ceci . Par exemple, j'ai trouvé que echo ssh-auth | bashcela échouera.
alexis
1
Vous pouvez simplement y remédier un peu plus. Vérifiez simplement s'il fonctionne et affectez les variables env. Et puis ajoutez AddKeysToAgent yes(ou utilisez prompt) à votre entrée de configuration ssh (utilisez Host *pour tous les hôtes.) De cette façon, le mot de passe SSH ne vous sera demandé que si vous essayez de vous connecter, sinon il vous sera peut-être demandé un mot de passe pour un simple git diffou git status.
ST-DDT du
2
$HOME/.sshpourrait être plus robuste que/home/$(whoami)/.ssh
Ari Sweedler
12

J'ai eu le même problème Ubuntuet les autres solutions ne m'ont pas aidé. J'ai finalement réalisé quel était mon problème. J'avais créé mes sshclés dans le /root/.sshdossier, donc même quand je courais en ssh-addtant que root, il ne pouvait pas faire son travail et continuer à dire

Could not open a connection to your authentication agent.

J'ai créé mes clés publiques et privées ssh dans le /home/myUsername/dossier et j'ai utilisé

ssh-agent /bin/sh

alors j'ai couru

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

et le problème a été résolu de cette façon.

Remarque: Pour accéder à votre référentiel, gitajoutez votre mot de passe git lorsque vous créez des sshclés avec ssh-keygen -t rsa -C "your git email here".

Akram
la source
9

Utilisez le paramètre -A lorsque vous vous connectez au serveur, par exemple:

ssh -A root@myhost

à partir de la page de manuel:

-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.
Lebnik
la source
Que fait-il et pourquoi?
erikbwork
selon la page de manuel ... man ssh ... -A Active le transfert de la connexion de l'agent d'authentification. Cela peut également être spécifié par hôte dans un fichier de configuration.
Scott Stensland
8

La solution de base à exécuter ssh-agentest répondue dans de nombreuses réponses. Cependant, en exécutant ssh-agentplusieurs fois (pour chaque terminal ouvert ou par connexion à distance), de nombreuses copies seront ssh-agentexécutées en mémoire. Les scripts suggérés pour éviter ce problème sont longs et nécessitent d'écrire et / ou de copier des fichiers séparés ou d'écrire trop de chaînes dans ~/.profileou ~/.schrc. Permettez-moi de suggérer une solution simple à deux chaînes:

Pour sh , bash , etc.:

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

Pour 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`

Qu'est-ce ici:

  • rechercher le processus ssh-agentpar nom et par utilisateur actuel
  • créer le fichier de script shell approprié en appelant ssh-agentet en s'exécutant ssh-agentsi aucun ssh-agentprocessus utilisateur actuel n'a été trouvé
  • évaluer le script shell créé qui configure l'environnement approprié

Il n'est pas nécessaire de protéger le script shell créé ~/.ssh-agent.tcshou l' ~/.ssh-agent.shaccès d'un autre utilisateur parce que: dans un premier temps, la communication avec ssh-agentest traitée via un socket protégé qui n'est pas accessible à d'autres utilisateurs, et dans un second temps, un autre utilisateur peut trouver ssh-agentsocket simple par des fichiers d'énumération dans le /tmp/répertoire. En ce qui concerne l'accès au ssh-agentprocessus, ce sont les mêmes choses.

oklas
la source
6

Essayez ce qui suit:

ssh-agent sh -c 'ssh-add && git push heroku master'
kenorb
la source
1
Cela ressemble à une façon propre de le faire.
Leon Grapenthin
6

Lire la réponse de @ cupcake pour des explications. Ici, j'essaie seulement d'automatiser le correctif.

Si vous utilisez un terminal Cygwin avec BASH, ajoutez ce qui suit au fichier $ HOME / .bashrc. Cela ne démarre ssh-agent qu'une seule fois dans le premier terminal Bash et ajoute les clés à ssh-agent. (Je ne sais pas si cela est requis sous 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

N'OUBLIEZ PAS d'ajouter vos bonnes clés dans la commande "ssh-add".

Kiran Mohan
la source
5

J'ai eu ce problème, lorsque j'ai démarré ssh-agent, alors qu'il était déjà en cours d'exécution. Obtient confus. Pour voir si c'est le cas, utilisez

eval $(ssh-agent)

pour voir si c'est la même chose que ce que vous pensiez que cela devrait être. Dans mon cas, c'était différent de celui que je venais de commencer.

Pour vérifier plus en détail si plusieurs agents ssh sont en cours d'exécution, vous pouvez consulter:

ps -ef | grep ssh
Jahmic
la source
2
Je pense que courir eval $(ssh-agent)est censé créer un nouvel agent avec un PID différent à chaque fois, bien que je puisse me tromper.
4

J'ai eu un problème similaire lorsque j'essayais de faire fonctionner cela sur Windows pour me connecter à stash via ssh

Voici la solution qui a fonctionné pour moi.

  1. Il s'avère que j'exécutais l'agent Pageant ssh sur ma boîte Windows - je vérifierais ce que vous exécutez. Je soupçonne que c'est Pageant car il vient par défaut avec Putty et winScp

  2. Ssh-add ne fonctionne pas à partir de la ligne de commande avec ce type d'agent

  3. Vous devez ajouter la clé privée via la fenêtre d'interface utilisateur de reconstitution historique que vous pouvez obtenir en double-cliquant sur l'icône Reconstitution historique dans la barre des tâches (une fois qu'elle est lancée).

  4. Avant d'ajouter la clé à Pageant, vous devez la convertir au format PPK. Des instructions complètes sont disponibles ici Comment convertir la clé SSH au format ppk

  5. C'est ça. Une fois que j'ai téléchargé ma clé pour la cacher, j'ai pu utiliser SourceTree pour créer un dépôt local et cloner la télécommande.

J'espère que cela t'aides...

Moonwalker
la source
3

J'ai résolu l'erreur en arrêtant de force (tué) les processus git (agent ssh), puis en désinstallant Git, puis en réinstallant Git.

Devendra Singh
la source
2
Je soupçonne que tout ce que vous aviez à faire était simplement de tuer tous les processus d'agent existants, puis de redémarrer un, au lieu d'avoir à réinstaller Git.
3

En utilisant Git Bash sur Win8.1E, ma résolution était la suivante:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa
SrBlanco
la source
Pourquoi est-il nécessaire de sortir vers /dev/null? Votre réponse fait exactement la même chose que celle-ci .
De plus, je voudrais souligner que ~/.ssh/id_rsac'est la clé par défaut, donc vous ne devriez pas avoir à spécifier ssh-add ~/.ssh/id_rsa, vous devez juste ssh-addtravailler.
J'ai essayé votre solution dans ce même environnement @Cupcake, ça ne marche pas. Je ne comprends pas pourquoi c'est la réponse non plus, mais à moins que je ne le fasse de cette façon, cela n'a jamais fonctionné.
nighliber
3

Si vous utilisez Putty, vous devrez peut-être définir l'option "Connexion / SSH / Auth / Autoriser le transfert d'agent" sur "true".

entrez la description de l'image ici

Vladius
la source
3

Cela a fonctionné pour moi.

Dans la fenêtre CMD, tapez la commande suivante:

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
kecco
la source
3

Pour bash intégré à Windows 10, j'ai ajouté ceci à .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
Kip
la source
1
Je ne sais pas pourquoi vous collez autant de texte si vous auriez pu simplement dire d'appeler $(ssh-agent -s)pour définir l'environnement de l'agent.
erikbwork
1
Cela a fonctionné pour moi lorsque je l'ai utilisé la première fois. Mais après un redémarrage du système, cela a en fait aggravé le problème. Avec ssh ne fonctionnant plus du tout . Non recommandé.
yspreen