Beschwerden von ssh-add: Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden


151

Ich habe versucht, ssh-addan einem RaspberryPi mit Raspbian zu arbeiten.

Ich kann anfangen ssh-agent, wenn ich es tue, gibt es die folgende Ausgabe in das 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;

Wenn ich renne, ps aux | grep sshkann ich sehen, dass es rennt.

Dann versuche ich, auszuführen ssh-add, um meine Passphrase hinzuzufügen, und erhalte Folgendes:

Could not open a connection to your authentication agent.

Irgendwelche Ideen?


6
Versuchen Sieeval $(ssh-agent)
Ulrich Dangel

Antworten:


224

Ihre Shell soll den von ausgegebenen Shell-Code auswerten ssh-agent. Führen Sie stattdessen Folgendes aus:

eval "$(ssh-agent)"

Wenn Sie ssh-agent bereits gestartet haben, kopieren Sie es und fügen Sie es in Ihre Shell-Eingabeaufforderung ein (vorausgesetzt, Sie führen eine Bourne-ähnliche Shell aus).

sshbefehle müssen wissen, wie man mit dem redet ssh-agent, sie kennen das aus der SSH_AUTH_SOCKumgebungsvariablen.


Danke, ich habe nicht ganz verstanden, wie es funktioniert. Das wird sehr geschätzt.
Daniel Groves

2
Oder Sie geben ssh-agent bash ein und nach dem ssh-add wird es funktionieren
RaduM

@Stephane, bekomme ich richtig verstanden, dass der Befehl ssh-agent nur die Ausgabe seiner Ausführung ausgibt, während die eval-Version den Befehl tatsächlich ausführt?
Denys S.

5
@DenysS. Nein, es führt die Einrichtung durch und teilt Ihrer Shell dann mit, wie die Umgebung aktualisiert werden soll, um Kontakt mit ihr aufnehmen zu können. Das kann es nicht von alleine. Es kann eine neue Shell mit der aktualisierten Umgebung starten (das ist es, was es ssh-agent bashtut), aber es kann nicht den Speicher eines separaten Prozesses aktualisieren, der einen Fremdbefehl ausführt (Ihre bereits laufende Shell).
Stéphane Chazelas

@StephaneChazelas, wenn mein ssh-agent beim booten gestartet wird, ich ihn aber noch in meiner shell auswerten muss, heißt das, dass er nicht automatisch für jede shell ausgewertet wird und irgendwie vom root-benutzer konfiguriert werden muss?
Denys S.

27

Probier diese:

$ ssh-agent /bin/sh
$ ssh-add $yourkey

5
Dies funktionierte tatsächlich für mich, wo keine der anderen Antworten funktionierte.
Joseph Snow

2
Wenn Sie die Fischschale verwenden, funktioniert diese Antwort. ssh-agent /usr/bin/fish.
Slackmart

1
Ich erhalte die Fehlermeldung: "Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden. "
IgorGanapolsky

@slackmart Wenn Sie fish in BSD installiert haben, ist sein Speicherort /usr/local/bin/fish(alternativ /usr/ports/shells/fish). Vielen Dank an den whereisBefehl, der mir dabei geholfen hat, das herauszufinden.
cjm

Toll @cjm, ich benutze Slackware Linux und das ist der Pfad, der für mich funktioniert.
Slackmart

12

Diese Frage wurde auch auf Stackoverflow sehr gut behandelt .

eval `ssh-agent -s`

ssh-add

Sie haben die Anführungszeichen vergessen `...`. Ohne sie wird der Operator split + glob für die Ausgabe aufgerufen.
Stéphane Chazelas

6

Wenn Sie csh als Shell verwenden ( FreeBSD PI ), könnte dies funktionieren:

eval `ssh-agent -c`

Als nächstes müssen Sie nur noch Folgendes tun:

ssh-add ~/.ssh/id_rsa

Ich erhalte die Fehlermeldung: "Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden. "
IgorGanapolsky

2

Sie können auch die folgende Syntax verwenden:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'

Das funktioniert bei mir nicht, wenn Sie gehen ssh-agent sh -c "ssh-add -l", werden Sie feststellen, dass Sie keine Identität haben.
Ain Tohvri

Weil Sie es zuerst hinzufügen müssen, zum Beispiel: ssh-agent sh -c "ssh-add && ssh-add -l"wird Ihre Identität drucken.
Kenorb

1

Versuchen Sie Folgendes: Gehen Sie zu C:\$Installation_Folder$\Git\cmd und führen Sie Folgendes aus:

start-ssh-agent 

Es öffnet einen Befehl cmd und führt ihn ssh-agentrichtig aus.

ssh-add ~/.ssh/id_rsa sollte dann funktionieren.


" bash: start-ssh-agent: befehl nicht gefunden "
IgorGanapolsky

1

Dies war verwirrend und hat 2 mögliche gute Antworten, abhängig davon, ob der Benutzer versucht, einen SSH-Schlüssel unter Linux oder Windows hinzuzufügen (wie ich es bin). Dies beantwortet wahrscheinlich nicht das OP, ist aber eine Erweiterung für Git-Bash. Ich verwende sowohl Windows als auch Ubuntu für die Entwicklung und meine Git-Installation unterscheidet sich jeweils geringfügig.

Versuchen Sie Folgendes: Gehen Sie zu C: \ $ Installationsordner $ \ Git \ cmd und führen Sie Folgendes aus:

start-ssh-agent Öffnet einen Befehl cmd und führt den ssh-agent ordnungsgemäß aus.

.. war eine gute Windows-Antwort, konnte aber nicht angeben, dass Sie den Git-Installationsordner über den Windows-Explorer suchen und ausführen sollten, damit die Windows-Shell nach Abschluss von Schritt 1 geöffnet wird.
"Wechseln Sie zu C: \ $ Installation_Folder $ \ Git \ cmd "

Schritt 2: Sie müssen nur doppelklicken

start-ssh-agent

In Schritt 3 kehren Sie zu git-bash oder dem von Ihnen ausgeführten * nix-Terminalemulator zurück und führen ssh-add aus. Wenn Sie den Standardnamen für den öffentlichen ssh-Schlüssel verwendet haben, müssen Sie den Namen nicht hinzufügen, da ssh-add diesen automatisch verwendet.


1

Es gibt verschiedene Möglichkeiten, wie Sie eine Identität mit sudo verwenden können, z sudo npm install.

Langer Weg , sondern gibt Ihnen auch root-Zugriff, so dass Sie nicht sudoviel verwenden müssen.

  1. Ausführen
    sudo ssh-agent bash
    Hier werden Sie nach Ihrem Passwort gefragt und danach ssh-agentmit den Rechten des Superbenutzers ausgeführt.
  2. Navigieren Sie zum .ssh-Ordner Ihrer Benutzer
    cd /home/user/.ssh
  3. Von dort kann man rennen

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

Kurz gesagt , nur Ihr Benutzer (es sei denn, Sie möchten viel 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

exportund evalfunktionieren genauso gut wie root, vorausgesetzt die Login-Shell von root ist Bourne-artig. Wenn Roots Shell csh oder tcsh ist, benutzeeval `ssh-agent -c`
Stéphane Chazelas

Beachten Sie, dass Sie rootIhrem SSH-Agenten auch Zugriff gewähren können, indem Siesudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas,

Versucht beide auch bash ist bourne nochmal Shell und hat auch nicht richtig funktioniert. Alle Benutzer auf meiner Debian-Jessie-Instanz, einschließlich root, sind standardmäßig so eingestellt, dass sie bash verwenden.
Belldandu

Was hast du versucht? eval "$(ssh-agent)"Wenn Sie dazu aufgefordert werden, wird eine Bash-Shell ausgeführt, die als root ausgeführt wird. Sie müssen offensichtlich sshvon dieser Shell oder ihrem Nachfolger aus starten, damit sie die SSH_AUTH_SOCK-Umgebungsvariable erben. eval "$(sudo ssh-agent)"; sudo ssh...nicht , weil Arbeit sudonicht standardmäßig die SSH_AUTH_SOCK env var passieren.
Stéphane Chazelas

Ich habe versucht eval "$(ssh-agent)", später nachzusehen, ob ein Konfigurationsfehler vorliegt. Obwohl die aktuelle Art und Weise, wie ich diese Anleitung gegeben habe, die freie Kontrolle darüber erlaubt, welcher Benutzer Sie sein möchten, da Sie bereits als Root angemeldet sind und auf alle Benutzer zugreifen können, die sich auf dem Server befinden. Also, sobald ich es richtig zum Laufen gebracht habe, bearbeite ich meine Antwort.
Belldandu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.