ssh-add denunce: impossibile aprire una connessione al proprio agente di autenticazione


151

Ho provato a ssh-addlavorare su un RaspberryPi con Raspbian.

Posso iniziare ssh-agent, quando lo faccio, dà il seguente output nel terminale:

SSH_AUTH_SOCK=/tmp/ssh-06TcpPflMg58/agent.2806; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2807; export SSH_AGENT_PID;
echo Agent pid 2807;

Se corro ps aux | grep sshvedo che è in esecuzione.

Quindi provo a eseguire ssh-addper aggiungere la mia passphrase chiave e ottengo quanto segue:

Could not open a connection to your authentication agent.

Qualche idea?


6
Provaeval $(ssh-agent)
Ulrich Dangel,

Risposte:


224

La tua shell ha lo scopo di valutare l'output del codice shell ssh-agent. Esegui invece questo:

eval "$(ssh-agent)"

Oppure, se hai già avviato ssh-agent, copialo incolla sul prompt della shell (supponendo che tu stia eseguendo una shell tipo Bourne).

sshi comandi devono sapere come parlare con ssh-agent, lo sanno dalla SSH_AUTH_SOCKvariabile d'ambiente.


Grazie, non ho capito bene come funziona. Questo è molto apprezzato.
Daniel Groves,

2
Oppure puoi inserire ssh-agent bash e dopo che ssh-add funzionerà
RaduM,

@Stephane, ho capito bene che il comando ssh-agent stampa l'output della sua esecuzione mentre eval version esegue effettivamente il comando?
Denys S.

5
@DenysS. Bene no, fa la sua configurazione e poi dice alla tua shell come aggiornare il suo ambiente per poterlo contattare. Non può farlo da solo. Può avviare una nuova shell con l'ambiente aggiornato (è quello che ssh-agent bashfa), ma non può aggiornare la memoria di un processo separato che esegue un comando esterno (la shell già in esecuzione).
Stéphane Chazelas,

@StephaneChazelas, se il mio agente ssh viene avviato all'avvio ma devo ancora valutarlo nella mia shell significa che non viene valutato automaticamente per ogni shell e deve essere configurato in qualche modo dall'utente root?
Denys S.

27

Prova questo:

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

5
Questo in realtà ha funzionato per me dove nessuna delle altre risposte ha funzionato.
Joseph Snow,

2
Se stai usando il guscio di pesce, questa risposta funziona. ssh-agent /usr/bin/fish.
Slackmart,


@slackmart Se hai installato fish in BSD, la sua posizione è /usr/local/bin/fish(in alternativa /usr/ports/shells/fish). Grazie al whereiscomando per avermi aiutato a capirlo.
cjm,

Grande @cjm, io uso Slackware Linux, e questo è il percorso che funziona per me.
slackmart,

12

Questa domanda è stata anche molto ben trattata su StackOverflow .

eval `ssh-agent -s`

ssh-add

Hai dimenticato le citazioni in giro `...`. Senza di essi, l'operatore split + glob viene richiamato sull'output.
Stéphane Chazelas,


2

È inoltre possibile utilizzare la sintassi seguente:

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

Questo non funziona per me, se vai ssh-agent sh -c "ssh-add -l"ti dirà che non hai identità.
Ain Tohvri,

Perché devi prima aggiungerlo, ad esempio: ssh-agent sh -c "ssh-add && ssh-add -l"stamperà la tua identità.
Kenorb,

1

Prova questo: vai a C:\$Installation_Folder$\Git\cmd ed esegui:

start-ssh-agent 

Si aprirà un comando cmd ed eseguirà nel ssh-agentmodo giusto.

ssh-add ~/.ssh/id_rsa dovrebbe quindi funzionare.


" bash: start-ssh-agent: comando non trovato "
IgorGanapolsky

1

Questo era confuso e ha 2 possibili buone risposte, a seconda che l'utente stia tentando di aggiungere un tasto ssh su Linux o Windows (come lo sono io). Questo probabilmente non risponde all'OP, ma è un'espansione per git-bash. Eseguo Windows e Ubuntu per lo sviluppo e la mia installazione di git è leggermente diversa in ciascuno.

Prova questo: vai su C: \ $ Cartella_Installazione $ \ Git \ cmd ed esegui:

start-ssh-agent Aprirà un comando cmd ed eseguirà ssh-agent nel modo giusto.

.. è stata una buona risposta di Windows, ma non è stato possibile specificare che ci si aspettava che attraverso Esplora risorse di Windows si trovasse la cartella di installazione di Git ed eseguisse la shell di Windows che si apriva al completamento del passaggio 1.
"vai a C: \ $ Installation_Folder $ \ Git \ cmd"

Passaggio 2: devi solo fare doppio clic

start-ssh-agent

Al passaggio 3, si torna a git-bash o all'emulatore di terminale * nix che si sta eseguendo ed si esegue ssh-add. Se hai usato il nome predefinito per la chiave pubblica ssh, non devi aggiungere il nome poiché ssh-add lo utilizza automaticamente.


1

Ci sono un paio di modi se desideri usare un'identità con sudo, ad es sudo npm install.

Lunga strada , ma ti dà anche l'accesso root, quindi non avrai bisogno di usare sudomolto.

  1. Esegui
    sudo ssh-agent bash
    Questo richiederà la tua password e successivamente verrà eseguito ssh-agentcon i privilegi del superutente,
  2. Passa alla cartella .ssh dei tuoi utenti
    cd /home/user/.ssh
  3. Da lì puoi correre

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

In breve , solo il tuo utente (a meno che tu non voglia fare molto 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

exporte evalfunziona allo stesso modo di root purché la shell di login di root sia come Bourne. Se la shell di root è csh o tcsh, usaeval `ssh-agent -c`
Stéphane Chazelas l'

Nota che puoi anche dare rootaccesso al tuo agente ssh facendosudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas

Ho provato entrambi anche bash è bourne di nuovo shell e nessuno dei due ha funzionato correttamente. tutti gli utenti sulla mia istanza debian jessie incluso root sono impostati per usare bash di default.
Belldandu,

Cosa hai provato eval "$(ssh-agent)"al prompt di una shell bash in esecuzione come root funzionerà. Ovviamente dovrai eseguire sshda quella shell o dal suo discendente in modo che ereditino l'env var SSH_AUTH_SOCK. eval "$(sudo ssh-agent)"; sudo ssh...non funzionerà perché sudoper impostazione predefinita non passa var var SSH_AUTH_SOCK.
Stéphane Chazelas,

ho provato a eval "$(ssh-agent)"guardare più tardi per vedere se c'è una sorta di errore di configurazione. Sebbene l'attuale modo in cui ho fornito questa guida consenta il controllo gratuito su quale utente desideri essere poiché sei già root e puoi accedere a qualsiasi utente id_rsa che è sul server. Quindi, una volta che lo faccio funzionare in modo appropriato, modifica la mia risposta.
Belldandu,
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.