Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden

1605

Ich stoße auf diesen Fehler von:

$ 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.

Ich habe versucht, die Schlüssel hinzuzufügen, und ich erhalte die folgende Fehlermeldung:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.
Danny Dai Smith
quelle
26
Frage: Sobald Sie JEDE Antwort auf dieser Seite durchgesehen haben und keine davon funktioniert. Was können Sie als nächstes tun?
Brandon Bertelsen
8
@BrandonBertelsen Versuchen Sie dieses: $ ssh-agent /bin/sh und $ ssh-add $yourkey
Shyam
@BrandonBertelsen Als nächstes sollten Sie überprüfen git config --list, ob Sie eine Einstellung vorgenommen haben. credential.helperWenn dies der Fall ist, sollten Sie diese Einstellung entfernen, da der Helfer nicht hilfreich ist.
Yooy

Antworten:

2382

Hast du angefangen ssh-agent?

Möglicherweise müssen Sie starten, ssh-agentbevor Sie den ssh-addBefehl ausführen :

eval `ssh-agent -s`
ssh-add

Beachten Sie, dass dadurch der Agent für msysgit Bash unter Windows gestartet wird . Wenn Sie eine andere Shell oder ein anderes Betriebssystem verwenden, müssen Sie möglicherweise eine Variante des Befehls verwenden, z. B. die in den anderen Antworten aufgeführten .

Siehe die folgenden Antworten:

  1. ssh-add beschwert sich: Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden
  2. Git Push erfordert Benutzername und Passwort (enthält detaillierte Anweisungen zur Verwendung von ssh-agent)
  3. Wie führe ich den Authentifizierungsagenten (git / ssh) aus? .
  4. Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden

Informationen zum automatischen Starten von ssh-agent und zum Arbeiten einer einzelnen Instanz in mehreren Konsolenfenstern finden Sie unter Starten von ssh-agent bei der Anmeldung .

Warum müssen wir evalstatt nur verwenden ssh-agent?

Um herauszufinden, warum, lesen Sie die Antwort von Robin Green .

Öffentliche und private Schlüssel

Außerdem ssh-addfüge ich bei jeder Verwendung immer private Schlüssel hinzu. Die Datei ~/.ssh/id_rsa.pubsieht aus wie ein öffentlicher Schlüssel. Ich bin mir nicht sicher, ob das funktionieren wird. Hast du eine ~/.ssh/id_rsadatei Wenn Sie es in einem Texteditor öffnen, heißt es dann, dass es sich um einen privaten Schlüssel handelt?

Gemeinschaft
quelle
18
@xtian Ich bin nicht sicher, ob ich das Problem verstehe. Ich kenne die genauen Details nicht, aber ich vermute, dass der private Schlüssel niemals über das Netzwerk gesendet wird. Ich denke, ssh-addnur einen verschlüsselten privaten Schlüssel auf dem Host-Computer zu entschlüsseln, damit er lokal verwendet werden kann ... er wird niemals an jemanden gesendet . Ich vermute, dass immer nur die öffentlichen Schlüssel über ein Netzwerk gesendet werden. Ist mein Verständnis falsch?
6
Du bist zu nett Cupcake. Du hast absolut recht. Mein Fehler. ex hier ; ssh-add fügt den privaten Schlüssel für den Benutzer hinzu. ssh-agent (laufender Prozess) kann im Namen des Clients / Hosts handeln, wobei der Server rsa-any-Schlüssel akzeptiert. Meine Güte. Ich weiß nicht, was mich so aufgeregt hat.
Xtian
22
Ich bin neugierig, warum das eval ssh-agent -sfunktioniert, aber ssh-agentalleine nicht.
DanielM
13
@DanielM: SSH benötigt zwei Dinge, um ssh-agent zu verwenden: eine im Hintergrund ausgeführte ssh-agent-Instanz und einen Umgebungsvariablensatz, der SSH mitteilt, welchen Socket es für die Verbindung mit dem Agenten ( SSH_AUTH_SOCKIIRC) verwenden soll. Wenn Sie nur ausführen, ssh-agentwird der Agent gestartet, aber SSH hat keine Ahnung, wo er zu finden ist.
Vanessa Phipps
4
Vielen Dank für Ihre Antwort. Ich habe gerade bemerkt, dass Sie backquote im Befehl verwendet haben. Ich bin so verwirrt, warum das Backquote (`) für den Auswertungsbefehl funktioniert, aber nicht für das einfache / doppelte Anführungszeichen (',") auf meiner Bash-Shell?
Weishi Zeng
539

Ich habe die anderen Lösungen ohne Erfolg ausprobiert. Ich habe mehr Nachforschungen angestellt und festgestellt, dass der folgende Befehl funktioniert. Ich benutze Windows 7 und Git Bash .

eval $(ssh-agent)

Weitere Informationen unter: https://coderwall.com/p/rdi_wq

Victor Alves
quelle
14
Funktionierte auch unter Windows 8.
Andreas Rudolph
Ich verwende auch Windows 7 und Git Bash und meine Antwort funktioniert einwandfrei. Es ist cool, dass du es auch so machen kannst.
2
Großartig !! Arbeitete auch mit Windows 10.
NitinM
1
Arbeitete an Manjaro
code_flow
1
$ eval "$ (ssh-agent -s)" funktionierte für mich unter Windows 10
Andrew Anderson
261

Der folgende Befehl hat bei mir funktioniert. Ich benutze CentOS.

exec ssh-agent bash
Mianjee
quelle
3
Danke, das hat bei mir funktioniert, ich habe 'exec ssh-agent zsh' für meine Shell ausgeführt.
Jasonmcclurg
2
Nach dieser gelöschten "Antwort" funktioniert es auch unter Amazon Linux AMI. Ich denke, es ist eine Unix / Linux / * nix-Lösung.
4
Ich ssh'ed in einen Docker-Container und ssh-add my.id_rsawürde an mir scheitern. Aber exec ssh-agent zshgab eine Umgebung, in der ich ssh-addohne Probleme konnte. Und ich bin in meinem Docker-Container :)
Markuz-Gj
Kann jemand bitte kurz erklären, was das Problem gewesen sein könnte? Danke :) Das hat auch auf meinem Ubuntu 14.04 funktioniert.
harkirat1892
arbeitete auch an Raspbian
mega_creamery
215

MsysGit oder Cygwin

Wenn Sie Msysgit oder Cygwin verwenden, finden Sie bei SSH-Agent ein gutes Tutorial in msysgit und cygwin und bash :

  1. Fügen Sie eine Datei mit dem Namen " .bashrcHome" hinzu.

  2. Öffnen Sie die Datei und fügen Sie sie ein:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
  3. Dies setzt voraus, dass sich Ihr Schlüssel am herkömmlichen ~/.ssh/id_rsaOrt befindet. Wenn dies nicht der Fall ist, geben Sie nach dem ssh-addBefehl einen vollständigen Pfad an .

  4. Datei hinzufügen oder erstellen ~/.ssh/config mit dem Inhalt

    ForwardAgent yes
    

    Im Original-Tutorial der ForwardAgent Parameter Yes, aber es ist ein Tippfehler. Verwenden Sie alle Kleinbuchstaben, sonst werden Fehler angezeigt.

  5. Starten Sie Msysgit neu. Sie werden aufgefordert, Ihre Passphrase einmal einzugeben, und das war's (bis Sie die Sitzung beenden oder Ihr SSH-Agent getötet wird).

Mac OS X

Wenn Sie nicht jedes Mal, wenn Sie ein Terminal öffnen, einen neuen SSH-Agenten starten möchten, lesen Sie Schlüsselbund . Ich bin jetzt auf einem Mac, daher habe ich das Tutorial ssh-agent mit zsh & keychain unter Mac OS X verwendet , um es einzurichten, aber ich bin sicher, dass eine Google-Suche viele Informationen für Windows enthält.

Update : Eine bessere Lösung für Mac ist das Hinzufügen Ihres Schlüssels zum Mac OS-Schlüsselbund:

ssh-add -K ~/.ssh/id_rsa

So einfach ist das.

RobW
quelle
1
Zu Ihrer
Information
1
Wenn ich eval `ssh-agent -s`das tue, stoppt der Prozess nicht, wenn ich cygwin beende.
Kiril
Gibt es eine Möglichkeit, die Konfiguration für Windows / gitbash einzurichten, damit Sie dies nicht jedes Mal tun müssen?
mix3d
4
Es sollte so sein ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)- sonst wird jedes Mal ein neuer ssh-Agent gestartet. Ich habe meine Maschine von Zeit zu Zeit getötet, als der Benutzer Cronjobs hatte.
Shreddern
3
ForwardAgent yesist nicht erforderlich und stellt ein nicht theoretisches Sicherheitsrisiko dar, wenn es für einen nicht vertrauenswürdigen Server festgelegt ist. Der lokale Zugriff auf Ihren Schlüsselagenten sollte unabhängig von dieser Einstellung funktionieren.
Selten needy
208

Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden

So beheben Sie diesen Fehler:

Bash:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

Verwenden ssh-addSie es dann wie gewohnt.


Heißer Tipp:

Ich habe immer vergessen, was ich für die obigen ssh-agent-Befehle eingeben soll, also habe ich einen Alias ​​in meiner .bashrcDatei wie folgt erstellt:

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

Jetzt anstatt zu verwenden ssh-agent , kann ich verwendenssh-agent-cyg

Z.B

$ 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

Ursprüngliche Quelle des Fixes:

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

Chris Snow
quelle
3
Sie müssen den evalBefehl jedes Mal ausführen, wenn Sie ihn zuvor ausgeführt haben ssh-agent. Ich verwende jetzt einen Alias. In der aktualisierten Antwort erfahren Sie, wie ich das mache.
Chris Snow
1
Zu Ihrer
Information
Ich musste auch die ssh-Spezifikation anstelle von https verwenden (siehe help.github.com/articles/changing-a-remote-s-url )
RunHolt
1
Sie, Sir, Sie sind großartig. Vielen Dank. ** Ich hatte das gleiche Problem beim Klonen eines Bitbucket-Repos. Ich hatte bereits einen SSH-Schlüssel eingerichtet, bekam aber immer wieder die Fehlermeldung : fatal: Could not read from remote repository..
Nishant Ghodke
Arbeitete für mich unter Windows 10 und Git Bash installiert
Desmond13
116

Ich hatte das gleiche Problem mit Linux, und hier ist, was ich getan habe:

Grundsätzlich startet der Befehl ssh-agent den Agenten, setzt jedoch nicht wirklich die Umgebungsvariablen für die Ausführung. Diese Variablen werden nur an die Shell ausgegeben.

Du brauchst:

eval `ssh-agent`

und dann ssh-add. Siehe Verbindung zu Ihrem Authentifizierungsagenten konnte nicht hergestellt werden .

n3o
quelle
1
Zu Ihrer
Information
Arbeitete auch für mich, während ich Probleme mit der Verwendung von boot2docker unter Windows hatte.
Veve
Das war es, was es für mich brauchte.
Tom
115

ssh-add und ssh (vorausgesetzt, Sie verwenden die openssh-Implementierungen) erfordern eine Umgebungsvariable, um mit dem ssh-Agenten kommunizieren zu können. Wenn Sie den Agenten in einem anderen Eingabeaufforderungsfenster als dem jetzt verwendeten gestartet haben oder wenn Sie ihn falsch gestartet haben, wird diese Umgebungsvariable weder von ssh-add noch von ssh angezeigt (da die Umgebungsvariable lokal festgelegt ist auf den Befehl festgelegt ist Eingabeaufforderung ist es eingestellt).

Sie sagen nicht, welche Version von ssh Sie verwenden, aber wenn Sie Cygwin verwenden, können Sie dieses Rezept von SSH Agent auf Cygwin verwenden :

# 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

Dadurch wird automatisch ein Agent für jedes neue Eingabeaufforderungsfenster gestartet, das Sie öffnen (was nicht optimal ist, wenn Sie mehrere Eingabeaufforderungen in einer Sitzung öffnen, dies sollte jedoch funktionieren).

Robin Green
quelle
1
Zu Ihrer
Information
9
Ich wurde hier von einer anderen SO-Frage verlinkt. Kann ich fragen, warum dies zur Bash-Konfigurationsdatei hinzugefügt werden muss? Auf meinem Computer muss ich nur ausführen eval $(ssh-agent)und kann für jedes neue Terminalfenster ssh ohne Kennwort verwenden.
Andy J
Dies sollte nicht möglich sein, es sei denn, Sie starten neue Terminals von diesem Terminal aus.
Robin Green
114

Lauf

ssh-agent bash
ssh-add

Um mehr Details zu erhalten, können Sie suchen

ssh-agent

oder laufe

man ssh-agent
bp zhang
quelle
7
Ich würde empfehlen, dass Sie dies versuchen, wenn Sie mit Git Bash unter Windows arbeiten.
Neeraj Sewani
@ neer17 das erlaubte mir ssh-copy-idauf ubuntu zu verwenden. Unsicher, warum ich den Schlüssel nicht hinzufügen konnte, ohne ssh-agentBash zu starten.
SomeGuyOnAComputer
2
Dies ist die für Windows! (getestet auf W10pro Build 1809 und Git 2.21.0)
Alfabravo
Ich benutze ZSH und das funktioniert bei mir:ssh-agent zsh; ssh-add
sirboderafael
97

Versuchen Sie die folgenden Schritte:

1) Öffnen Sie Git Bash und führen Sie Folgendes aus: cd ~/.ssh

2) Versuchen Sie, den Agenten auszuführen: eval $(ssh-agent)

3) Im Moment können Sie den folgenden Befehl ausführen: ssh-add -l

ChechoroArtem
quelle
9
Dies ist die einzige Lösung, die hier funktioniert hat (unter Windows 7). Zuerst benutzte ich ps aux | grep sshden killBefehl und den Befehl in Ricks Antwort, um die Agenten zu töten. Danach ssh-addfunktionierte es ohne den Schalter -l (mit -l wurde ein Fehler ausgegeben). eval 'ssh-agent'Da in Ricks Antwort nicht funktioniert hat, musste ich eval $(ssh-agent)wie in Chechoros Antwort hier verwenden.
Frug
6
+1 Ich hatte genau das gleiche Problem wie OP (Windows 7) und dies ist die einzige Lösung, die für mich funktioniert hat.
Weblurk
1
Zu Ihrer
Information
2
@Frug Es sind Backticks, keine Apostrophe; im Shell-Skript bedeutet dies, dass ausgeführt wird, was darin enthalten ist. $(ssh-agent)ist gleichbedeutend mit `ssh-agent`aber besser lesbar.
MM
96

Anstatt zu verwenden $ ssh-agent -s, habe ich $ eval `ssh-agent -s`dieses Problem gelöst.

Folgendes habe ich Schritt für Schritt ausgeführt (ab Schritt 2 auf GitBash):

  1. Ich habe meinen .ssh-Ordner unter aufgeräumt C:\user\<username>\.ssh\
  2. Generierte einen neuen SSH-Schlüssel
    $ ssh-keygen -t rsa -b 4096 -C "[email protected]"
  3. Überprüfen Sie, ob bereits eine Prozess-ID (SSH-Agent) ausgeführt wird.
    $ ps aux | grep ssh
  4. (Optional) Wenn in Schritt 3 welche gefunden wurden, töten Sie diese
    $ kill <pids>
  5. Startete den SSH-Agenten
    $ eval `ssh-agent -s`
  6. In Schritt 2 generierter SSH-Schlüssel zum SSH-Agenten hinzugefügt
    $ ssh-add ~/.ssh/id_rsa
vinsinraw
quelle
3
'eval' wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt.
Chutipong Roobklom
Sie können den Agenten einfach durch ssh-agent -sAuswertung neu starten und ältere Schlüssel mit ssh-add ~ / .ssh / id_rsa hinzufügen. Wenn Sie einen neuen SSH-Schlüssel generieren, müssen Sie diesen Schlüssel in all Ihren Diensten wie Github, Bitbucket usw. aktualisieren.
Mohit Satish Pawar
Gibt es eine Möglichkeit, Windows-Neustarts zu überleben? Nach dem Neustart funktioniert es erst, wenn ich "eval ssh-agent -s" und "ssh-add ~ / .ssh / id_rsa" erneut starte.
Michal Vician
1
Nach langer Suche ist dies die Lösung, die funktioniert hat
Sujit.Warrier
Tolle Erklärung!
Avivamg
56

In Windows 10 habe ich alle hier aufgeführten Antworten ausprobiert, aber keine davon schien zu funktionieren. Tatsächlich geben sie einen Hinweis. Um ein Problem zu lösen, benötigen Sie einfach 3 Befehle. Die Idee dieses Problems ist, dass ssh-add SSH_AUTH_SOCK- und SSH_AGENT_PID-Umgebungsvariablen benötigt, um mit dem aktuellen Ssh-Agent-Sockendateipfad und der PID-Nummer festgelegt zu werden.

ssh-agent -s > temp.txt

Dadurch wird die Ausgabe von ssh-agent in einer Datei gespeichert. Der Inhalt der Textdatei sieht ungefähr so ​​aus:

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

Kopieren Sie etwas wie "/tmp/ssh-kjmxRb2764/agent.2764" aus der Textdatei und führen Sie den folgenden Befehl direkt in der Konsole aus:

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

Kopieren Sie so etwas wie "3044" aus der Textdatei und führen Sie den folgenden Befehl direkt in der Konsole aus:

set SSH_AGENT_PID=3044

Wenn nun Umgebungsvariablen (SSH_AUTH_SOCK und SSH_AGENT_PID) für die aktuelle Konsolensitzung festgelegt sind, führen Sie Ihren Befehl ssh-add aus, und die Verbindung zum ssh-Agenten wird nicht erneut fehlschlagen.

BIOHAZARD
quelle
2
Vielen Dank! Das war genau das, was ich brauchte.
Isochronous
6
Nein, immer noch das gleiche.
Jaskey
3
Diese Schritte sind die gleichen wie 'eval $ (ssh-agent)'
K.Nicholas
2
Auf meinem Windows 10 behoben! Vielen Dank!
ntl
1
Dies hat mir tatsächlich geholfen, das Problem unter Linux zu speichern ... musste nur setdurchexport
greg hor
30

Eine Sache, auf die ich stieß, war, dass evalich mit Cygwin nicht funktionierte. Was für mich funktionierte, warssh-agent ssh-add id_rsa .

Danach stieß ich auf ein Problem, dass mein privater Schlüssel zu offen war, die Lösung, die ich dafür finden konnte (von hier aus ):

chgrp Users id_rsa

ebenso gut wie

chmod 600 id_rsa

endlich konnte ich verwenden:

ssh-agent ssh-add id_rsa
Vnge
quelle
Haben Sie verwenden eval `ssh-agent`, mit den Backticks `um ssh-agent, wie in gezeigt , meine Antwort ? Das hat in Cygwin gut funktioniert. Sie scheinen Recht zu haben, das ssh-agent ssh-addfunktioniert aber auch, zumindest im msysgit Bash. Beachten Sie jedoch, dass dies id_rsader Standardschlüssel ist, der verwendet wird, sodass Sie ihn nicht mit angeben müssen ssh-agent ssh-add id_rsa.
Ich glaube, ich hatte die Backticks benutzt, aber für mich immer noch keine Würfel
Vnge
1
Oh mein Gott, du hast meine wenigen Stunden Frust gelöst. Vielen Dank!
Chee Loong bald
Diese Antwort hat bei mir in Bash funktioniert.
Lsakurifaisu
27

Um die Antwort von n3o für Windows 7 zu erweitern ...

Mein Problem war in der Tat, dass einige erforderliche Umgebungsvariablen nicht festgelegt wurden, und n3o ist richtig, dass ssh-agent Ihnen sagt, wie diese Umgebungsvariablen festgelegt werden, sie jedoch nicht tatsächlich festlegt.

Da Sie in Windows keine "Auswertung" durchführen können, gehen Sie stattdessen wie folgt vor:

Leiten Sie die Ausgabe von ssh-agent in eine Batchdatei mit um

ssh-agent > temp.bat

Verwenden Sie jetzt einen Texteditor wie Notepad, um temp.bat zu bearbeiten. Für jede der ersten beiden Zeilen: - Fügen Sie das Wort "set" und ein Leerzeichen am Zeilenanfang ein. - Löschen Sie das erste Semikolon und alles, was folgt.

Löschen Sie nun die dritte Zeile. Ihre temp.bat sollte ungefähr so ​​aussehen:

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

Führen Sie temp.bat aus. Dadurch werden die Umgebungsvariablen festgelegt, die für die Funktion von ssh-add erforderlich sind.

Steve Saporta
quelle
Zu Ihrer
Information
Ich bekomme immer noch Could not open a connection to your authentication agent.beim Ausführen von ssh-add in Win10 PowerShell.
Kebman
19

Ich habe das gerade zum Laufen gebracht. Öffnen Sie Ihre ~/.ssh/configDatei.

Fügen Sie Folgendes hinzu:

Host github.com
 IdentityFile ~/.ssh/github_rsa

Die Seite, die mir den Hinweis gab , SSH für Git einzurichten, sagte, dass die Einrückung einzelner Leerzeichen wichtig ist ... obwohl ich hier eine Konfiguration von Heroku hatte, die diesen Speicherplatz nicht hatte und ordnungsgemäß funktioniert.

Paul Becotte
quelle
1
Dies hilft nicht bei der Eingabe der Passphrase für den SSH-Schlüssel.
Alesch
1
Wenn Sie die Passphrase nicht eingeben möchten, erstellen Sie einen Schlüssel ohne einen. Es macht keinen Sinn, eine Passphrase zu haben, wenn Sie sie trotzdem nur in Ihrem Skript speichern möchten.
Paul Becotte
Das ist der springende Punkt bei der Verwendung von ssh-agent. Das Passwort für Ihre Schlüssel wird in einem sicheren Schlüsselbund gespeichert, der von ssh-agent verwaltet wird.
Alesch
Dies ist die beste Antwort für mich hier. Hatte viele Probleme mit ssh-agent, die tausende Male in Windows 7 gestartet wurden, und diese Kill-Falle hat den Trick nicht getan. Es macht mir nichts aus, zu Hause keine Passphrase auf meinem PC zu haben.
Fleischwolf
18

Wenn Sie diese Anweisungen befolgen, ist Ihr Problem gelöst.

Wenn Sie sich auf einem Mac oder Linux befinden, geben Sie Folgendes ein:

eval "$(ssh-agent -s)"

Wenn Sie sich auf einem Windows-Computer befinden, geben Sie Folgendes ein:

ssh-agent -s
Fahim Boron
quelle
13

Lassen Sie mich eine andere Lösung anbieten. Wenn Sie gerade Git 1.8.2.2 oder so installiert haben und SSH aktivieren möchten, befolgen Sie die gut geschriebenen Anweisungen .

Alles bis zu Schritt 5.6, wo Sie möglicherweise auf einen leichten Haken stoßen. Wenn bereits ein SSH-Agent ausgeführt wird, wird beim Neustart von bash möglicherweise die folgende Fehlermeldung angezeigt

Could not open a connection to your authentication agent

Verwenden Sie in diesem Fall den folgenden Befehl, um festzustellen, ob mehr als ein SSH-Agent-Prozess ausgeführt wird

ps aux | grep ssh

Wenn Sie mehr als einen SSH-Agent-Dienst sehen, müssen Sie alle diese Prozesse beenden. Verwenden Sie den Befehl kill wie folgt (die PID ist auf Ihrem Computer eindeutig).

kill <PID>

Beispiel:

kill 1074

Nachdem Sie alle ssh-agent-Prozesse entfernt haben, führen Sie px aux | aus Geben Sie den Befehl grep ssh erneut ein, um sicherzustellen, dass sie nicht mehr vorhanden sind, und starten Sie dann Bash neu.

Voila, du solltest jetzt so etwas bekommen:

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

Jetzt können Sie mit Schritt 5.7 und darüber hinaus fortfahren.

Rick
quelle
Ich habe die Straßensperre passiert, Tyvm
Jason Fingar
Ich wollte nur hinzufügen, dass in meinem Fall eines der aufgelisteten Elemente der grep-Prozess ist, mit dem wir suchen, aber er wird bereits nach seiner Ausführung beendet. Kein Wortspiel beabsichtigt.
Ryan Mortensen
Zu Ihrer
Information
13

Für Windows-Benutzer stellte ich fest, dass cmd eval `ssh-agent -s`nicht funktionierte, aber die Verwendung von git bash war ein Vergnügen eval `ssh-agent -s`; ssh-add KEY_LOCATIONund stellte sicher, dass der Windows-Dienst "OpenSSH Key Management" nicht deaktiviert war

aqm
quelle
12

Hinweis: Dies ist eine Antwort auf diese Frage , die mit dieser zusammengeführt wurde. Diese Frage war für Windows 7, was bedeutet, dass meine Antwort für Cygwin / MSYS / MSYS2 war. Dieser scheint für ein Unix zu sein, bei dem ich nicht erwarten würde, dass der SSH-Agent so verwaltet werden muss .

Dadurch wird der SSH-Agent ausgeführt und nur beim ersten Mal authentifiziert , nicht jedes Mal, wenn Sie Ihr Bash-Terminal öffnen. Es kann für jedes Programm verwendet werden, das SSH im Allgemeinen verwendet, einschließlich ssh selbst und scp. Fügen Sie dies einfach hinzu zu /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
quelle
1
Zu Ihrer
Information
2
Der ssh-agent-Prozess scheint nicht mit demselben Terminal verbunden zu sein, mit dem er ausgeführt wurde. Ich denke ps -A | grep ssh-agentoder ps h -C ssh-agentsollte anstelle vonps | grep ssh-agent
Alexis
1
Die Verwendung eines Bindestrichs im Funktionsnamen wird möglicherweise nicht empfohlen. Ich weiß nicht warum, aber lies das . Zum Beispiel habe ich festgestellt, dass dies echo ssh-auth | bashfehlschlagen wird.
Alexis
1
Sie können dies einfach ein bisschen mehr tun. Überprüfen Sie einfach, ob es ausgeführt wird, und weisen Sie die env-Variablen zu. Fügen Sie dann Ihren SSH-Konfigurationseintrag hinzu AddKeysToAgent yes(oder verwenden Sie ihn prompt) (verwenden Sie ihn Host *für alle Hosts). Auf diese Weise werden Sie nur dann nach dem SSH-Kennwort gefragt, wenn Sie tatsächlich versuchen, eine Verbindung herzustellen. Andernfalls werden Sie möglicherweise nach einem Kennwort für ein einfaches git diffoder gefragt git status.
ST-DDT
2
$HOME/.sshkönnte robuster sein als/home/$(whoami)/.ssh
Ari Sweedler
12

Ich hatte das gleiche Problem Ubuntuund die anderen Lösungen haben mir nicht geholfen. Endlich wurde mir klar, was mein Problem war. Ich hatte meine sshSchlüssel in einem /root/.sshOrdner erstellt. Selbst wenn ich ssh-addals Root ausgeführt wurde, konnte es seine Arbeit nicht erledigen und sagte immer wieder

Could not open a connection to your authentication agent.

Ich habe meine öffentlichen und privaten ssh-Schlüssel im /home/myUsername/Ordner erstellt und verwendet

ssh-agent /bin/sh

dann rannte ich

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

und das Problem wurde auf diese Weise gelöst.

Hinweis: Um auf Ihr Repository zuzugreifen, gitfügen Sie Ihr Git-Passwort hinzu, wenn Sie sshSchlüssel mit erstellen ssh-keygen -t rsa -C "your git email here".

Akram
quelle
9

Verwenden Sie den Parameter -A, wenn Sie eine Verbindung zum Server herstellen. Beispiel:

ssh -A root@myhost

von der Manpage:

-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
quelle
Was macht es und warum?
Erikbwork
gemäß Manpage ... man ssh ... -A Aktiviert die Weiterleitung der Authentifizierungsagentenverbindung. Dies kann auch auf Hostbasis in einer Konfigurationsdatei angegeben werden.
Scott Stensland
8

Die grundlegende Lösung zum Ausführen ssh-agentwird in vielen Antworten beantwortet. Durch mehrmaliges Ausführen ssh-agent(pro geöffnetem Terminal oder pro Remote-Anmeldung) werden jedoch viele Kopien erstellt, ssh-agentdie nicht im Speicher ausgeführt werden. Die Skripte, die vorgeschlagen werden, um dieses Problem zu vermeiden, sind lang und müssen separate Dateien schreiben und / oder kopieren oder zu viele Zeichenfolgen in ~/.profileoder schreiben ~/.schrc. Lassen Sie mich vorschlagen einfache Lösung mit zwei Zeichenfolgen :

Für sh , bash usw.:

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

Für csh , tcsh usw.:

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

Was ist hier:

  • Suche den Prozess ssh-agent nach Name und aktuellem Benutzer
  • Erstellen Sie eine entsprechende Shell-Skriptdatei, indem Sie aufrufen ssh-agentund sich ssh-agentselbst ausführen , wenn kein aktueller Benutzer vorhanden istssh-agent gefunden wurde
  • Evaluieren Sie das erstellte Shell-Skript, das die entsprechende Umgebung konfiguriert

Es ist nicht erforderlich, das erstellte Shell-Skript ~/.ssh-agent.tcshoder den ~/.ssh-agent.shZugriff eines anderen Benutzers zu schützen, da: Die Kommunikation mit ssh-agentwird zunächst über einen geschützten Socket verarbeitet, auf den ein anderer Benutzer nicht zugreifen kann, und der zweite Benutzer kann den ssh-agentSocket einfach durch Aufzählungsdateien im /tmp/Verzeichnis finden. Was den Zugang zum ssh-agentProzess betrifft, so sind es die gleichen Dinge.

oklas
quelle
6

Versuche Folgendes:

ssh-agent sh -c 'ssh-add && git push heroku master'
Kenorb
quelle
1
Sieht nach einem sauberen Weg aus.
Leon Grapenthin
6

Lesen Sie die Antwort von @ cupcake, um Erklärungen zu erhalten. Hier versuche ich nur das Update zu automatisieren.

Wenn Sie das Cygwin-Terminal mit BASH verwenden, fügen Sie der Datei $ HOME / .bashrc Folgendes hinzu. Dies startet ssh-agent nur einmal im ersten Bash-Terminal und fügt die Schlüssel zu ssh-agent hinzu. (Nicht sicher, ob dies unter Linux erforderlich ist)

###########################
# 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

VERGESSEN SIE NICHT, Ihre korrekten Schlüssel im Befehl "ssh-add" hinzuzufügen.

Kiran Mohan
quelle
5

Ich hatte dieses Problem, als ich ssh-agent startete, als es bereits lief. Wird verwirrt. Um festzustellen, ob dies der Fall ist, verwenden Sie

eval $(ssh-agent)

um zu sehen, ob dies das gleiche ist, wie Sie es sich vorgestellt haben. In meinem Fall war es anders als das, was ich gerade angefangen habe.

Um weiter zu überprüfen, ob mehr als ein SSH-Agent ausgeführt wird, können Sie Folgendes überprüfen:

ps -ef | grep ssh
Jahmic
quelle
2
Ich denke, beim Laufen eval $(ssh-agent)soll jedes Mal ein neuer Agent mit einer anderen PID erstellt werden, obwohl ich mich irren könnte.
4

Ich hatte ein ähnliches Problem, als ich versuchte, dies unter Windows zum Laufen zu bringen, um über ssh eine Verbindung zum Stash herzustellen

Hier ist die Lösung, die für mich funktioniert hat.

  1. Es stellte sich heraus, dass ich Pageant ssh agent auf meiner Windows-Box ausgeführt habe - ich würde überprüfen, was Sie ausführen. Ich vermute, es ist Pageant, da es standardmäßig mit Putty und winScp geliefert wird

  2. Das ssh-add funktioniert mit diesem Agententyp nicht über die Befehlszeile

  3. Sie müssen den privaten Schlüssel über das Fenster der Festzug-Benutzeroberfläche hinzufügen, das Sie erhalten, indem Sie das Festzug-Symbol in der Taskleiste (nach dem Start) doppelt betrachten.

  4. Bevor Sie den Schlüssel zu Pageant hinzufügen, müssen Sie ihn in das PPK-Format konvertieren. Vollständige Anweisungen finden Sie hier. So konvertieren Sie den SSH-Schlüssel in das ppk-Format

  5. Das ist es. Nachdem ich meinen Schlüssel zum Versteck hochgeladen hatte, konnte ich mit SourceTree ein lokales Repo erstellen und die Fernbedienung klonen.

Hoffe das hilft...

Mondwanderer
quelle
3

Ich habe den Fehler behoben, indem ich das Stoppen (Beenden) von Git-Prozessen (SSH-Agent) erzwungen, dann Git deinstalliert und Git erneut installiert habe.

Devendra Singh
quelle
2
Ich vermute, dass Sie lediglich alle vorhandenen Agentenprozesse beenden und dann einen neu starten mussten, anstatt Git neu installieren zu müssen.
3

Mit Git Bash unter Win8.1E war meine Auflösung wie folgt:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa
SrBlanco
quelle
Warum muss ausgegeben werden /dev/null? Ihre Antwort macht im Grunde genau das Gleiche wie diese .
Außerdem möchte ich darauf hinweisen, dass dies ~/.ssh/id_rsader Standardschlüssel ist, sodass Sie ihn nicht angeben müssen ssh-add ~/.ssh/id_rsa, sondern nur ssh-addfunktionieren sollten.
Ich habe Ihre Lösung in derselben Umgebung @Cupcake ausprobiert, sie funktioniert nicht. Ich verstehe auch nicht, warum dies die Antwort ist, aber wenn ich es nicht so gemacht habe, hat es nie funktioniert.
Nachtliber
3

Wenn Sie Putty verwenden, müssen Sie möglicherweise die Option "Verbindung / SSH / Auth / Agentenweiterleitung zulassen" auf "true" setzen.

Geben Sie hier die Bildbeschreibung ein

Vladius
quelle
3

Das hat bei mir funktioniert .

Geben Sie im CMD-Fenster den folgenden Befehl ein:

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
quelle
3

Für in Windows 10 integrierte Bash habe ich Folgendes zu .bash_profile hinzugefügt:

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
Pennen
quelle
1
Ich weiß nicht, warum Sie so viel Text einfügen, wenn Sie nur hätten sagen können, dass Sie anrufen sollen $(ssh-agent -s), um die Umgebung des Agenten festzulegen.
Erikbwork
1
Das hat bei mir funktioniert, als ich es das erste Mal benutzt habe. Nach einem Neustart des Systems wurde das Problem jedoch noch schlimmer. Mit ssh funktioniert überhaupt nicht mehr. Nicht empfohlen.
Yspreen