Impossibile aprire una connessione al tuo agente di autenticazione


1607

Sto riscontrando questo errore di:

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

Ho provato ad aggiungere le chiavi e ottengo questo errore di seguito:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

26
Domanda: una volta che hai esaminato OGNI risposta in questa pagina e nessuna di esse funziona. Cosa puoi fare dopo?
Brandon Bertelsen,

8
@BrandonBertelsen Prova questo: $ ssh-agent /bin/sh e $ ssh-add $yourkey
shyam

@BrandonBertelsen Successivamente dovresti usare git config --listper vedere se hai impostato credential.helper- se hai, dovresti rimuovere questa impostazione, poiché l'helper non è utile.
yoyo

Risposte:


2386

Hai iniziato? ssh-agent ?

Potrebbe essere necessario iniziare ssh-agentprima di eseguire il ssh-addcomando:

eval `ssh-agent -s`
ssh-add

Si noti che ciò avvierà l'agente per msysgit Bash su Windows . Se si utilizza una shell o un sistema operativo diversi, potrebbe essere necessario utilizzare una variante del comando, come quelle elencate nelle altre risposte .

Vedi le seguenti risposte:

  1. ssh-add denunce: impossibile aprire una connessione al proprio agente di autenticazione
  2. Git push richiede nome utente e password (contiene istruzioni dettagliate su come usare ssh-agent)
  3. Come eseguire l'agente di autenticazione (git / ssh)? .
  4. Impossibile aprire una connessione al tuo agente di autenticazione

Per avviare automaticamente ssh-agent e consentire a una singola istanza di funzionare in più finestre della console, consultare Avvio di ssh-agent all'accesso .

Perché dobbiamo usare evalinvece di solo ssh-agent?

Per scoprire perché, vedi la risposta di Robin Green .

Chiavi pubbliche e private

Inoltre, ogni volta che lo uso ssh-add, aggiungo sempre chiavi private. Il file ~/.ssh/id_rsa.pubsembra una chiave pubblica, non sono sicuro che funzionerà. Hai un ~/.ssh/id_rsafile? Se lo apri in un editor di testo, dice che è una chiave privata?


18
@xtian Non sono sicuro di aver capito il problema. Non conosco i dettagli esatti, ma suppongo che la chiave privata non sia mai inviata sulla rete. Penso ssh-addsemplicemente di decrittografare una chiave privata crittografata sul computer host, in modo che possa essere utilizzata localmente ... non viene mai inviata a nessuno . Immagino che solo le chiavi pubbliche vengano mai inviate in rete. La mia comprensione è errata?

6
Sei troppo gentile Cupcake. Hai assolutamente ragione. Colpa mia. ex qui ; ssh-add aggiunge la chiave privata per l'agente ssh dell'utente (processo in esecuzione) che può agire per conto del client / host con il server che accetta le chiavi rsa-qualunque. Accidenti. Non so cosa mi abbia reso così eccitato.
xtian il

22
Sono curioso di sapere perché eval ssh-agent -sfunziona, ma ssh-agentda solo non lo fa.
DanielM

13
@DanielM: SSH ha bisogno di due cose per usare ssh-agent: un'istanza di ssh-agent in esecuzione in background e una serie di variabili d'ambiente che dice a SSH quale socket dovrebbe usare per connettersi all'agente ( SSH_AUTH_SOCKIIRC). Se lo esegui, ssh-agentl'agente verrà avviato, ma SSH non avrà idea di dove trovarlo.
Vanessa Phipps,

4
Grazie per la risposta però. Ho appena notato che hai usato il backquote nel comando. Sono così confuso perché il backquote (`) funziona per il comando eval ma non virgoletta singola / doppia (',") sulla mia shell bash?
Weishi Zeng

540

Ho provato le altre soluzioni senza risultati. Ho fatto ulteriori ricerche e ho scoperto che il seguente comando ha funzionato. Sto usando Windows 7 e Git Bash .

eval $(ssh-agent)

Maggiori informazioni in: https://coderwall.com/p/rdi_wq


14
Ha funzionato anche su Windows 8.
Andreas Rudolph,

Sto anche usando Windows 7 e Git Bash e la mia risposta funziona bene. È bello poterlo fare anche in questo modo.

2
Grande !! Ha funzionato anche con Windows 10.
NitinM,

1
Ha lavorato su Manjaro
code_flow il

1
$ eval "$ (ssh-agent -s)" ha funzionato per me su Windows 10
Andrew Anderson il

261

Il seguente comando ha funzionato per me. Sto usando CentOS.

exec ssh-agent bash

3
Grazie, questo ha funzionato per me, ho eseguito "exec ssh-agent zsh" per la mia shell.
Jasonmcclurg,

2
Secondo questa "risposta" eliminata , funziona anche su AMI Amazon Linux. Immagino sia una soluzione Unix / Linux / * nix.

4
Mi misi in un container mobile e fallivo ssh-add my.id_rsa. Ma ha exec ssh-agent zshdato un ambiente dove ho potuto ssh-addsenza problemi. E sono nel mio container
docker

Qualcuno può spiegare brevemente quale potrebbe essere stato il problema? Grazie :) Questo ha funzionato anche sul mio Ubuntu 14.04.
harkirat1892,

ha lavorato anche su raspbian
mega_creamery

215

MsysGit o Cygwin

Se stai usando Msysgit o Cygwin puoi trovare un buon tutorial su SSH-Agent in msysgit e cygwin e bash :

  1. Aggiungi un file chiamato .bashrcalla tua cartella home.

  2. Apri il file e incollalo:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
  3. Ciò presuppone che la chiave sia nella ~/.ssh/id_rsaposizione convenzionale . In caso contrario, includere un percorso completo dopo il ssh-addcomando.

  4. Aggiungi o crea file ~/.ssh/configcon i contenuti

    ForwardAgent yes
    

    Nel tutorial originale il ForwardAgentparametro è Yes, ma è un refuso. Usa tutte le lettere minuscole o otterrai errori.

  5. Riavvia Msysgit. Ti chiederà di inserire la passphrase una volta, e basta (fino al termine della sessione o il tuo agente ssh viene ucciso).

Mac / OS X

Se non vuoi avviare un nuovo ssh-agent ogni volta che apri un terminale, dai un'occhiata a Keychain . Ora sono su un Mac, quindi ho usato il tutorial ssh-agent con zsh e portachiavi su Mac OS X per configurarlo, ma sono sicuro che una ricerca su Google avrà molte informazioni per Windows.

Aggiornamento : una soluzione migliore su Mac è aggiungere la chiave al portachiavi di Mac OS:

ssh-add -K ~/.ssh/id_rsa

Semplice come quella.



1
Quando lo faccio, eval `ssh-agent -s`il processo non si interrompe quando esco da Cygwin.
Kiril,

C'è un modo per impostare la configurazione per Windows / gitbash in modo da non doverlo fare ogni volta?
mix3d

4
Dovrebbe essere ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)- altrimenti un nuovo ssh-agent viene avviato ogni volta. Ho ucciso la mia macchina di tanto in tanto quando l'utente aveva cronjobs.
distruggere il

3
ForwardAgent yesnon è necessario ed è un rischio non teorico per la sicurezza se impostato per qualsiasi server non attendibile. L'accesso locale al key-agent dovrebbe funzionare indipendentemente da questa impostazione.
SeldomNeedy,

208

Impossibile aprire una connessione al tuo agente di autenticazione

Per risolvere questo errore:

bash:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

Quindi usa ssh-addcome faresti normalmente.


Suggerimento giusto:

Ho sempre dimenticato cosa digitare per i comandi ssh-agent sopra, quindi ho creato un alias nel mio .bashrcfile in questo modo:

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

Ora invece di usare ssh-agent, posso usaressh-agent-cyg

Per esempio

$ 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

Fonte originale di correzione:

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


3
dovrai eseguire il evalcomando ogni volta che avresti eseguito in precedenza ssh-agent. Uso un alias ora, vedere la risposta aggiornata per come lo faccio.
Chris Snow,


Avevo anche bisogno di usare la specifica ssh invece di https (vedi help.github.com/articles/changing-a-remote-s-url )
RunHolt

1
Signore, siete fantastici. Grazie. ** Ho affrontato lo stesso problema, mentre la clonazione di un pronti contro termine bitbucket, avevo già messa a punto una chiave SSH, ma continuavo errore nel recupero: fatal: Could not read from remote repository..
Nishant Ghodke,

Ha funzionato per me su Windows 10 e installato
Git

116

Ho affrontato lo stesso problema per Linux, ed ecco cosa ho fatto:

Fondamentalmente, il comando ssh-agent avvia l'agent, ma in realtà non imposta le variabili di ambiente per l'esecuzione. Emette semplicemente quelle variabili sulla shell.

Devi:

eval `ssh-agent`

e poi fai ssh-add. Vedi Impossibile aprire una connessione al tuo agente di autenticazione .



Ha funzionato anche per me pur avendo problemi con boot2docker su Windows.
Veve

Questo è quello che ci è voluto per me.
Tom,

115

ssh-add e ssh (supponendo che si stiano utilizzando le implementazioni di openssh) richiedono una variabile di ambiente per sapere come parlare con l'agente ssh. Se hai avviato l'agente in una finestra del prompt dei comandi diversa da quella che stai utilizzando ora, o se lo hai avviato in modo errato, né ssh-add né ssh vedranno quel set di variabili di ambiente (perché la variabile di ambiente è impostata localmente sul comando prompt è impostato in).

Non dici quale versione di ssh stai usando, ma se stai usando Cygwin, puoi usare questa ricetta dall'Agente SSH su 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

Ciò avvierà automaticamente un agente per ogni nuova finestra del prompt dei comandi che si apre (che non è ottimale se si aprono più prompt dei comandi in una sessione, ma almeno dovrebbe funzionare).



9
Sono stato collegato qui da un'altra domanda SO. Posso chiedere perché è necessario aggiungerlo al file di configurazione di Bash? Sulla mia macchina tutto ciò che devo fare è eseguire eval $(ssh-agent)e posso usare ssh senza password per ogni nuova finestra del terminale.
Andy J,

Ciò non dovrebbe essere possibile, a meno che non si lancino nuovi terminali da quel terminale.
Robin Green,

114

Correre

ssh-agent bash
ssh-add

Per ottenere maggiori dettagli è possibile cercare

ssh-agent

o corri

man ssh-agent

7
Consiglierei che se stai lavorando con git bash su Windows, prova questo.
Neeraj Sewani,

@ neer17 questo mi ha permesso di usare ssh-copy-idsu Ubuntu. Non sono sicuro del perché non sia stato possibile aggiungere la chiave senza utilizzare ssh-agentper avviare bash.
SomeGuyOnAComputer

2
Questo è quello per Windows! (testato su W10pro build 1809 e git 2.21.0)
Alfabravo

Sto usando ZSH e questo funziona per me:ssh-agent zsh; ssh-add
sirboderafael

97

Prova i seguenti passaggi:

1) Apri Git Bash ed esegui: cd ~/.ssh

2) Prova a eseguire l'agente: eval $(ssh-agent)

3) In questo momento, puoi eseguire il seguente comando: ssh-add -l


9
Questa è l'unica soluzione qui che ha funzionato per me (su Windows 7). In primo luogo ho usato il ps aux | grep sshe il killcomando nella risposta di Rick di uccidere l'agenti. Dopodiché ha ssh-addfunzionato senza l'opzione -l (l'uso di -l ha dato un errore). eval 'ssh-agent'come nella risposta di Rick non ha funzionato, ho dovuto usare eval $(ssh-agent)come nella risposta di Chechoro qui.
Frug

6
+1 Ho avuto lo stesso identico problema di OP (Windows 7) e questa è l'unica soluzione che ha funzionato per me.
Weblurk,


2
@Frug È backtick, non apostrofi; in shell script che significa eseguire ciò che è contenuto all'interno. $(ssh-agent)è equivalente `ssh-agent`ma più leggibile.
MM

96

Invece di usare $ ssh-agent -s, ho usato $ eval `ssh-agent -s`per risolvere questo problema.

Ecco cosa ho eseguito passo dopo passo (passaggio 2 in poi su GitBash):

  1. Ho ripulito la mia cartella .ssh in C:\user\<username>\.ssh\
  2. Generata una nuova chiave SSH
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. Controllare se esiste già un ID processo (agente ssh).
    $ ps aux | grep ssh
  4. (Facoltativo) Se presente nel passaggio 3, eliminali
    $ kill <pids>
  5. Avviato l'agente ssh
    $ eval `ssh-agent -s`
  6. Aggiunta la chiave ssh generata nel passaggio 2 all'agente ssh
    $ ssh-add ~/.ssh/id_rsa

3
'eval' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch.
Chutipong Roobklom,

Puoi semplicemente riavviare agent da eval ssh-agent -se aggiungere una chiave precedente usando ssh-add ~ / .ssh / id_rsa. Se generi una nuova chiave SSH, dovrai aggiornarla in tutti i tuoi servizi come github, bitbucket, ecc.
Mohit Satish Pawar

C'è un modo per far sopravvivere questo riavvio di Windows? Dopo il riavvio non funziona fino a quando non lancio ssh-agent -snuovamente "eval " e "ssh-add ~ / .ssh / id_rsa".
Michal Vician,

1
dopo aver cercato a lungo, questa è la soluzione che ha funzionato
Sujit.Warrier

Grande spiegazione!
avivamg

56

In Windows 10 ho provato tutte le risposte elencate qui, ma nessuna di queste sembrava funzionare. In realtà danno un indizio. Per risolvere un problema devi semplicemente 3 comandi. L'idea di questo problema è che ssh-add necessita delle variabili di ambiente SSH_AUTH_SOCK e SSH_AGENT_PID da impostare con il percorso del file di calzino ssh-agent e il numero pid correnti.

ssh-agent -s > temp.txt

Ciò salverà l'output di ssh-agent nel file. Il contenuto del file di testo sarà simile al seguente:

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

Copia qualcosa come "/tmp/ssh-kjmxRb2764/agent.2764" dal file di testo ed esegui il seguente comando direttamente nella console:

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

Copia qualcosa come "3044" dal file di testo ed esegui il seguente comando direttamente nella console:

set SSH_AGENT_PID=3044

Ora, quando le variabili di ambiente (SSH_AUTH_SOCK e SSH_AGENT_PID) sono impostate per la sessione della console corrente, esegui il tuo comando ssh-add e non riuscirà nuovamente a connettere l'agente ssh.


2
Grazie! Questo era esattamente ciò di cui avevo bisogno.
Isochronous,

6
No, sempre lo stesso.
Jaskey,

3
Questi passaggi sono gli stessi di "eval $ (ssh-agent)"
K. Nicholas

2
Risolto sul mio Windows 10! Grazie!
ntl

1
Questo in realtà mi ha aiutato a salvare il problema su Linux ... dovevo solo sostituire setconexport
greg hor il

30

Una cosa che ho scoperto è che evalnon ha funzionato per me usando Cygwin, quello che ha funzionato per me è stato ssh-agent ssh-add id_rsa.

Successivamente ho riscontrato un problema per cui la mia chiave privata era troppo aperta, la soluzione che sono riuscito a trovare per questo (da qui ):

chgrp Users id_rsa

così come

chmod 600 id_rsa

finalmente sono stato in grado di usare:

ssh-agent ssh-add id_rsa

Hai usato eval `ssh-agent`, con le punte posteriori in `giro ssh-agent, come mostrato nella mia risposta ? Per Cygwin ha funzionato perfettamente. Sembra che tu abbia ragione ssh-agent ssh-add, ma funziona anche nel msysgit Bash. Tuttavia, si noti che id_rsaè la chiave predefinita utilizzata, quindi non è necessario specificarla con ssh-agent ssh-add id_rsa.

Credo di aver usato i bastoncini, ma per me ancora nessun dado
Vnge,

1
OMG Hai risolto le mie poche ore di frustrazione. Grazie!
Chee Loong Presto il

Questa risposta ha funzionato per me in bash.
Lsakurifaisu,

27

Amplificare la risposta di n3o per Windows 7 ...

Il mio problema era infatti che alcune variabili d'ambiente richieste non erano impostate, e n3o ha ragione che ssh-agent ti dice come impostare quelle variabili d'ambiente, ma in realtà non le imposta.

Dato che Windows non ti consente di fare "eval", ecco invece cosa fare:

Reindirizzare l'output di ssh-agent su un file batch con

ssh-agent > temp.bat

Ora usa un editor di testo come Blocco note per modificare temp.bat. Per ciascuna delle prime due righe: - Inserire la parola "set" e uno spazio all'inizio della riga. - Elimina il primo punto e virgola e tutto ciò che segue.

Ora cancella la terza riga. Il tuo temp.bat dovrebbe assomigliare a questo:

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

Esegui temp.bat. Questo imposterà le variabili d'ambiente necessarie per far funzionare ssh-add.



Ricevo ancora Could not open a connection to your authentication agent.quando eseguo ssh-add in PowerShell Win10.
Kebman,

19

Ho appena funzionato. Apri il tuo ~/.ssh/configfile.

Aggiungi quanto segue

Host github.com
 IdentityFile ~/.ssh/github_rsa

La pagina che mi ha dato il suggerimento di impostare SSH per Git diceva che il rientro dello spazio singolo è importante ... anche se qui avevo una configurazione da Heroku che non aveva quello spazio e funzionava correttamente.


1
Questo non aiuta a inserire la passphrase per la chiave SSH.
alesch,

1
Se non si desidera inserire la passphrase, creare una chiave senza una. Non ha senso avere una passphrase se la memorizzi comunque nella tua sceneggiatura.
Paul Becotte,

Questo è il punto centrale dell'uso di ssh-agent. La password per le tue chiavi è memorizzata in un portachiavi sicuro, gestito da ssh-agent.
alesch,

Questa è la risposta migliore per me qui. Ho avuto molti problemi con ssh-agent a partire migliaia di volte in Windows 7 e quella trappola mortale non ha funzionato. Non mi dispiace non avere passphrase sul mio personal computer a casa.
Fleshgrinder,

18

Se segui queste istruzioni, il tuo problema sarebbe risolto.

Se utilizzi un computer Mac o Linux, digita:

eval "$(ssh-agent -s)"

Se utilizzi un computer Windows, digita:

ssh-agent -s

13

Lasciami offrire un'altra soluzione. Se avete appena installato Git 1.8.2.2 o giù di lì, e si desidera abilitare SSH, seguire le ben Scritto- direzioni .

Tutto fino al passaggio 5.6 in cui potresti incontrare un leggero inconveniente. Se un agente SSH è già in esecuzione, è possibile che venga visualizzato il seguente messaggio di errore al riavvio di bash

Could not open a connection to your authentication agent

In tal caso, utilizzare il comando seguente per vedere se è in esecuzione più di un processo ssh-agent

ps aux | grep ssh

Se vedi più di un servizio ssh-agent, dovrai uccidere tutti questi processi. Usa il comando kill come segue (il PID sarà univoco sul tuo computer)

kill <PID>

Esempio:

kill 1074

Dopo aver rimosso tutti i processi ssh-agent, eseguire px aux | comando grep ssh per essere sicuri che non ci siano più, quindi riavviare Bash.

Voila, ora dovresti ottenere qualcosa del genere:

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

Ora puoi continuare dal passaggio 5.7 e oltre.


mi ha fatto passare il posto di blocco, tyvm
Jason Fingar il

Volevo solo aggiungere che nel mio caso uno degli elementi elencati è il processo grep con cui stiamo effettuando la ricerca, ma viene già ucciso dopo la sua esecuzione. Nessun gioco di parole previsto.
Ryan Mortensen,


13

Per gli utenti di Windows , ho scoperto che cmd eval `ssh-agent -s`non funzionava, ma usando git bash ha funzionato a meraviglia eval `ssh-agent -s`; ssh-add KEY_LOCATIONe assicurandomi che il servizio Windows "Gestione chiavi OpenSSH" non fosse disabilitato


12

Nota: questa è una risposta a questa domanda , che è stata unita a questa. Quella domanda era per Windows 7, il che significa che la mia risposta era per Cygwin / MSYS / MSYS2. Questo sembra un po 'unix, in cui non mi aspetto che l'agente SSH debba essere gestito in questo modo .

Questo eseguirà l'agente SSH e eseguirà l'autenticazione solo la prima volta che ne avrai bisogno , non ogni volta che apri il tuo terminale Bash. Può essere utilizzato per qualsiasi programma che utilizza SSH in generale, inclusi ssh stesso e scp. Aggiungi questo 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 "$@"; }


2
Il processo ssh-agent non sembra essere associato allo stesso terminale utilizzato per eseguirlo. Immagino ps -A | grep ssh-agento ps h -C ssh-agentdebba essere usato al posto dips | grep ssh-agent
alexis

1
L'uso di un trattino nel nome della funzione potrebbe non essere raccomandato. Non so perché, ma leggi questo . Ad esempio, ho scoperto che echo ssh-auth | bashfallirà.
alexis

1
Puoi semplicemente risolverlo un po 'di più. Basta controllare se è in esecuzione e assegnare le variabili env. E quindi aggiungi AddKeysToAgent yes(o usa prompt) la tua voce di configurazione ssh (usa Host *per tutti gli host). In questo modo ti verrà chiesta la password SSH solo se provi effettivamente a connetterti altrimenti ti potrebbe essere richiesta una password per un semplice git diffo git status.
ST-DDT,

2
$HOME/.sshpotrebbe essere più robusto di/home/$(whoami)/.ssh
Ari Sweedler l'

12

Ho avuto lo stesso problema Ubuntue le altre soluzioni non mi hanno aiutato. Alla fine ho capito quale fosse il mio problema. Avevo creato le mie sshchiavi nella /root/.sshcartella, quindi anche quando correvo ssh-addcome root, non poteva fare il suo lavoro e continuare a dire

Could not open a connection to your authentication agent.

Ho creato le mie chiavi ssh pubbliche e private nella /home/myUsername/cartella e l'ho usato

ssh-agent /bin/sh

poi ho corso

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

e il problema è stato risolto in questo modo.

Nota: per accedere al repository su gitaggiungi la tua password git quando crei le sshchiavi con ssh-keygen -t rsa -C "your git email here".


9

Utilizzare il parametro -A quando ci si connette al server, ad esempio:

ssh -A root@myhost

dalla pagina 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.

Cosa fa e perché?
erikbwork,

come da man page ... man ssh ... -A Abilita l'inoltro della connessione dell'agente di autenticazione. Questo può anche essere specificato su base per host in un file di configurazione.
Scott Stensland,

8

La soluzione di base da eseguire ha ssh-agentuna risposta in molte risposte. Tuttavia, l'esecuzione ssh-agentpiù volte (per ogni terminale aperto o per accesso remoto) creerà molte copie in ssh-agentesecuzione in memoria. Gli script suggeriti per evitare questo problema sono lunghi e devono scrivere e / o copiare file separati o devono scrivere troppe stringhe in ~/.profileo ~/.schrc. Vorrei suggerire una soluzione semplice a due stringhe:

Per sh , bash , ecc:

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

Per csh , tcsh , ecc:

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

Cosa c'è qui:

  • cerca il processo ssh-agentper nome e per utente corrente
  • creare il file di script shell appropriato chiamando ssh-agented eseguirsi ssh-agentse non viene ssh-agenttrovato alcun processo utente corrente
  • valutare lo script di shell creato che configura l'ambiente appropriato

Non è necessario proteggere lo script di shell creato ~/.ssh-agent.tcsho l' ~/.ssh-agent.shaccesso di un altro utente perché: inizialmente la comunicazione ssh-agentviene elaborata tramite socket protetto che non è accessibile ad altri utenti, mentre al secondo un altro utente può trovare ssh-agentsocket semplice tramite i file di enumerazione nella /tmp/directory. Per quanto riguarda l'accesso al ssh-agentprocesso è la stessa cosa.



6

Leggi la risposta di @ cupcake per le spiegazioni. Qui provo solo ad automatizzare la correzione.

Se si utilizza il terminale Cygwin con BASH, aggiungere quanto segue al file $ HOME / .bashrc. Questo avvia ssh-agent solo una volta nel primo terminale Bash e aggiunge le chiavi a ssh-agent. (Non sono sicuro se questo è richiesto su 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

NON DIMENTICARE di aggiungere le chiavi corrette nel comando "ssh-add".


5

Ho avuto questo problema, quando ho avviato ssh-agent, quando era già in esecuzione. Si confonde. Per vedere se questo è il caso, utilizzare

eval $(ssh-agent)

per vedere se questo è lo stesso di quello che pensavi dovesse essere. Nel mio caso, era diverso da quello che avevo appena iniziato.

Per verificare ulteriormente se hai più di un agente ssh in esecuzione, puoi rivedere:

ps -ef | grep ssh

2
Penso che la corsa eval $(ssh-agent)dovrebbe creare ogni volta un nuovo agente con un PID diverso, anche se potrei sbagliarmi.

4

Ho avuto un problema simile quando stavo cercando di farlo funzionare su Windows per connettermi a stash tramite ssh

Ecco la soluzione che ha funzionato per me.

  1. Ho scoperto che stavo eseguendo Pageant ssh agent sulla mia finestra di Windows - Verificherei cosa stai eseguendo. Ho il sospetto che sia Pageant in quanto viene fornito di default con Putty e winScp

  2. Ssh-add non funziona dalla riga di comando con questo tipo di agente

  3. È necessario aggiungere la chiave privata tramite la finestra dell'interfaccia utente dello spettacolo che è possibile ottenere pubblicando l'icona dello spettacolo sulla barra delle applicazioni (una volta avviata).

  4. Prima di aggiungere la chiave a Pageant è necessario convertirla in formato PPK. Le istruzioni complete sono disponibili qui Come convertire la chiave SSH in formato PPK

  5. Questo è tutto. Una volta caricata la mia chiave come scorta, sono stato in grado di utilizzare SourceTree per creare un repository locale e clonare il telecomando.

Spero che sia di aiuto...


3

Ho risolto l'errore forzando l'arresto (interruzione) dei processi git (agente ssh), quindi la disinstallazione di Git e l'installazione di nuovo di Git.


2
Ho il sospetto che tutto ciò che dovevi fare fosse semplicemente eliminare qualsiasi processo agente esistente, quindi riavviarne uno, invece di dover reinstallare Git.

3

Usando Git Bash su Win8.1E, la mia risoluzione era la seguente:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa

Perché è necessario eseguire l'output /dev/null? La tua risposta sostanzialmente fa esattamente la stessa cosa di questa .

Inoltre, vorrei sottolineare che ~/.ssh/id_rsaè la chiave predefinita, quindi non dovresti specificare ssh-add ~/.ssh/id_rsa, ssh-adddovrebbe funzionare.

Ho provato la tua soluzione in questo stesso ambiente @Cupcake, non funziona. Non capisco nemmeno perché questa sia la risposta, ma se non l'ho fatto in questo modo non ha mai funzionato.
camicia da notte

3

Se si utilizza Putty, forse è necessario impostare l'opzione "Connessione / SSH / Auth / Consenti inoltro agente" su "true".

inserisci qui la descrizione dell'immagine


3

Questo ha funzionato per me.

Nella finestra CMD, digitare il comando seguente:

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

3

Per bash integrato in Windows 10, l'ho aggiunto 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

1
Non so perché incolli così tanto testo se avessi potuto dire di chiamare $(ssh-agent -s)per impostare l'ambiente dell'agente.
erikbwork,

1
Questo ha funzionato per me quando l'ho usato per la prima volta. Ma dopo il riavvio del sistema, il problema è peggiorato. Con ssh non funziona affatto più. Non consigliato.
yspreen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.