ssh-add se plaint: impossible d'ouvrir une connexion à votre agent d'authentification

151

J'ai essayé de ssh-addtravailler sur un RaspberryPi sous Raspbian.

Je peux commencer ssh-agent, quand je le fais donne la sortie suivante dans le 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 je cours ps aux | grep sshje peux voir qu'il est en cours d'exécution.

Ensuite, j'essaie de courir ssh-addpour ajouter ma phrase secrète de clé et j'obtiens ce qui suit:

Could not open a connection to your authentication agent.

Des idées?

Daniel Groves
la source
6
Essayezeval $(ssh-agent)
Ulrich Dangel

Réponses:

224

Votre shell est censé évaluer cette sortie de code shell ssh-agent. Exécutez ceci à la place:

eval "$(ssh-agent)"

Ou, si vous avez déjà démarré ssh-agent, copiez-le et collez-le dans votre invite de shell (en supposant que vous exécutiez un shell de type Bourne).

sshles commandes doivent savoir comment parler à ssh-agent, elles le savent grâce à la SSH_AUTH_SOCKvariable d'environnement.

Stéphane Chazelas
la source
Merci, je n'ai pas bien compris comment ça marche. C'est très apprécié.
Daniel Groves
2
Ou vous pouvez entrer ssh-agent bash et après le ssh-add fonctionnera
RaduM
@ Stephane, est-ce que je comprends correctement que la commande ssh-agent imprime simplement le résultat de son exécution alors que la version eval exécute la commande?
Denys S.
5
@DenysS. Eh bien non, il fait sa configuration puis indique à votre shell comment mettre à jour son environnement pour pouvoir le contacter. Il ne peut pas faire ça tout seul. Il peut démarrer un nouveau shell avec l'environnement mis à jour (c'est ce qui se ssh-agent bashproduit), mais il ne peut pas mettre à jour la mémoire d'un processus séparé exécutant une commande étrangère (votre shell en cours d'exécution).
Stéphane Chazelas
@StephaneChazelas, si mon agent ssh est démarré au démarrage mais que je dois encore l'évaluer dans mon shell, cela signifie-t-il qu'il n'est pas automatiquement évalué pour chaque shell et doit être configuré d'une manière ou d'une autre par l'utilisateur root?
Denys S.
27

Essaye celui-là:

$ ssh-agent /bin/sh
$ ssh-add $yourkey
utilisateur48656
la source
5
Cela a réellement fonctionné pour moi là où aucune des autres réponses n'a fonctionné.
Joseph Snow
2
Si vous utilisez la coquille de poisson, cette réponse fonctionne. ssh-agent /usr/bin/fish.
Slackmart
1
Je reçois une erreur: " Impossible d'ouvrir une connexion avec votre agent d'authentification. "
IgorGanapolsky
@slackmart Si vous avez installé du poisson dans BSD, son emplacement est /usr/local/bin/fish(alternativement /usr/ports/shells/fish). Merci à la whereiscommande de m'aider à comprendre cela.
cjm
Super @cjm, j'utilise Slackware Linux et c'est le chemin qui fonctionne pour moi.
Slackmart
12

Cette question a également été très bien traitée sur Stackoverflow .

eval `ssh-agent -s`

ssh-add
xaa
la source
Vous avez oublié les citations autour `...`. Sans eux, l'opérateur split + glob est appelé sur la sortie.
Stéphane Chazelas
6

Si vous utilisez csh comme shell ( FreeBSD PI ), cela pourrait fonctionner:

eval `ssh-agent -c`

Ensuite, il vous suffit de faire quelque chose comme:

ssh-add ~/.ssh/id_rsa
Nbari
la source
Je reçois une erreur: " Impossible d'établir une connexion avec votre agent d'authentification. "
IgorGanapolsky
2

Vous pouvez également utiliser la syntaxe suivante:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'
Kenorb
la source
Cela ne fonctionne pas pour moi, si vous y allez, ssh-agent sh -c "ssh-add -l"cela vous dira que vous n'avez aucune identité.
Ain Tohvri
Parce que vous devez d'abord l'ajouter, par exemple: ssh-agent sh -c "ssh-add && ssh-add -l"imprimera votre identité.
Kenorb
1

Essayez ceci: allez à C:\$Installation_Folder$\Git\cmd et exécutez:

start-ssh-agent 

Il ouvrira une commande cmd et exécutera ssh-agentle bon chemin.

ssh-add ~/.ssh/id_rsa devrait alors travailler.

sab125
la source
" bash: start-ssh-agent: commande introuvable "
IgorGanapolsky
1

Cela prêtait à confusion et a 2 bonnes réponses possibles, selon que l’utilisateur tente d’ajouter une clé ssh sous Linux ou Windows (tel que je suis). Cela ne répond probablement pas au PO, mais constitue une extension pour git-bash. J'utilise Windows et Ubuntu pour le développement et mon installation de git est légèrement différente dans chacun.

Essayez ceci: allez dans C: \ $ Installation_Folder $ \ Git \ cmd et exécutez:

start-ssh-agent Il va ouvrir une commande cmd et exécuter ssh-agent de la bonne façon.

.. était une bonne réponse de Windows, mais n’a pas pu spécifier que vous deviez passer par l’explorateur Windows pour rechercher le dossier d’installation de Git et exécuter le shell Windows qui s’ouvrirait à la fin de l’étape 1.
"aller à C: \ $ Installation_Folder $ \ Git \ cmd "

Étape 2: il vous suffit de double-cliquer

start-ssh-agent

À l'étape 3, vous retournez à git-bash ou à l'émulateur de terminal * nix que vous utilisez et exécutez ssh-add. Si vous avez utilisé le nom par défaut pour la clé publique ssh, vous n'avez pas besoin d'ajouter le nom car ssh-add l'utilise automatiquement.

Wolf Halton
la source
1

Si vous souhaitez utiliser une identité avec sudo, vous pouvez par exemple sudo npm install:

Long chemin , mais vous donne également un accès root afin que vous n’ayez pas besoin d’utiliser sudobeaucoup.

  1. Run
    sudo ssh-agent bash
    Ceci vous demandera votre mot de passe et ensuite fonctionnera ssh-agentavec les privilèges du superutilisateur,
  2. Accédez au dossier .ssh de vos utilisateurs.
    cd /home/user/.ssh
  3. De là, vous pouvez courir

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

Court chemin , seulement votre utilisateur (sauf si vous voulez beaucoup de sudo)

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
la source
exportet evalfonctionne aussi bien que le shell de connexion fourni par root est comme Bourne. Si la coque de la racine est csh ou tcsh, utilisezeval `ssh-agent -c`
Stéphane Chazelas
Notez que vous pouvez aussi donner rootaccès à votre agent ssh en faisantsudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas
Essayé les deux aussi bash est bourne à nouveau shell et ni a fonctionné correctement. Tous les utilisateurs de mon instance Debian Jessie, y compris root, sont configurés pour utiliser bash par défaut.
Belldandu
Qu'as-tu essayé? eval "$(ssh-agent)"à l'invite d'un shell bash fonctionnant en tant que root fonctionnera. Vous devrez évidemment exécuter à sshpartir de ce shell ou de son descendant pour qu'ils héritent de la variable d'environnement SSH_AUTH_SOCK. eval "$(sudo ssh-agent)"; sudo ssh...ne fonctionnera pas car, sudopar défaut, ne passe pas la variable d'environnement SSH_AUTH_SOCK.
Stéphane Chazelas
J'ai essayé de eval "$(ssh-agent)"regarder plus tard pour voir s'il y avait une sorte d'erreur de configuration. Bien que la manière actuelle que j'ai donnée à ce guide permette de contrôler librement l'utilisateur que vous souhaitez être depuis votre compte déjà root et que vous pouvez accéder à tous les utilisateurs id_rsa présents sur le serveur. Donc, une fois que je le fais fonctionner correctement modifier ma réponse.
Belldandu