"Could not open a connection to your authentication agent": come risolvere

ssh-add non ha trovato un ssh-agent in esecuzione, perché la variabile SSH_AUTH_SOCK non è impostata in questa shell. Avvia un agent con eval "$(ssh-agent -s)" ed esegui di nuovo ssh-add. L'eval conta: eseguire ssh-agent da solo stampa soltanto le variabili senza impostarle. La stessa riga funziona in Git Bash. In PowerShell, avvia invece il servizio ssh-agent di Windows.

Aggiornata il . Eseguito con OpenSSH 10.3 su macOS e OpenSSH 10.0 su Debian 13, con agent temporanei e una chiave usa e getta.

La soluzione su Linux e macOS

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
ssh-add -l

La prima riga avvia l'agent e imposta due variabili nella tua shell attuale. L'ultima riga elenca le chiavi caricate. Nella shell fish usa eval (ssh-agent -c).

Diagnosi

echo "$SSH_AUTH_SOCK"
ssh-add -l
echo $?
Stato di uscita e testoSignificato
0, elenca le chiaviL'agent funziona e ha delle chiavi
1, The agent has no identities.L'agent funziona ed è vuoto. Esegui ssh-add
2, Could not open a connection to your authentication agent.SSH_AUTH_SOCK non è impostata o è vuota
2, Error connecting to agent: No such file or directoryLa variabile punta a un socket che non esiste più

Motivi comuni

Hai eseguito ssh-agent senza eval

Eseguito da solo, ssh-agent avvia un processo in background e stampa comandi per la shell. Nessuno li esegue, quindi la tua shell non impara nulla e l'errore resta:

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-XXXXXX/agent.5467; export SSH_AUTH_SOCK;
SSH_AGENT_PID=5468; export SSH_AGENT_PID;
echo Agent pid 5468;
$ ssh-add -l
Could not open a connection to your authentication agent.

Ogni tentativo di questo tipo lascia anche un agent inutilizzato in esecuzione. pgrep -l ssh-agent li elenca e puoi chiudere quelli in più con kill.

Una nuova shell, tmux, cron o sudo

Le variabili esistono solo nella shell dove hai eseguito eval e nei programmi che avvia. Un altro terminale, un job cron o una sessione tmux esistente non le hanno. sudo di solito le rimuove.

Per riusare un solo agent da più shell, dagli un percorso di socket fisso:

export SSH_AUTH_SOCK="$HOME/.ssh/agent.sock"
ssh-add -l >/dev/null 2>&1
[ $? -eq 2 ] && { rm -f "$SSH_AUTH_SOCK"; eval "$(ssh-agent -s -a "$SSH_AUTH_SOCK")"; }

Può andare in ~/.bashrc o ~/.zshrc. Avvia un agent solo se nessuno risponde su quel socket. Molti desktop Linux e macOS avviano già un agent al login, quindi controlla prima echo "$SSH_AUTH_SOCK" in un terminale appena aperto. Su un Mac, vedi ssh-agent e il portachiavi di macOS.

Un socket obsoleto

Le shell più vecchie tengono il vecchio percorso dopo che l'agent si è fermato, oppure una sessione tmux ricollegata ne conserva uno di un login precedente:

ls -l "$SSH_AUTH_SOCK"

Se il file non c'è più, avvia un nuovo agent come mostrato sopra, oppure in tmux imposta di nuovo la variabile da una nuova shell.

Sei su un server e ti aspetti l'agent del tuo portatile

Senza agent forwarding, un login su un server non ha alcun agent, e lì questo messaggio è normale. Se vuoi una chiave sul server da usare, avvia lì un agent. Per l'agent forwarding, leggi prima i suoi rischi, perché chiunque abbia root su quel server può usare le tue chiavi inoltrate finché sei connesso.

Windows

Windows esegue l'agent come servizio, ed è disattivato per impostazione predefinita. In PowerShell eval non serve. In un PowerShell da amministratore:

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent

L'ultima riga dovrebbe mostrare Running. Poi, in un PowerShell normale:

ssh-add $env:USERPROFILE\.ssh\id_ed25519

In Git Bash, usa invece i comandi in cima a questa pagina. Avviano l'agent incluso in Git, separato dal servizio di Windows.

Ti serve l'agent?

Non sempre. SSH usa direttamente i file delle chiavi e chiede solo la passphrase ogni volta. Per caricare una chiave in un agent automaticamente al primo uso, aggiungi questo a ~/.ssh/config:

Host *
  AddKeysToAgent yes

Domande

Perché ssh-add funziona in un terminale e non in un altro?

Le variabili dell'agente esistono solo nella shell dove hai eseguito eval e nei programmi che avvia. Avvia l'agente da ~/.bashrc o ~/.zshrc con un socket fisso, oppure usa l'agente che il desktop avvia all'accesso.

Serve ssh-agent per usare le chiavi SSH?

No. ssh legge direttamente i file delle chiavi e chiede la passphrase ogni volta. L'agente tiene solo in memoria le chiavi sbloccate, così la passphrase la scrivi una volta.

Come si avvia ssh-agent su Windows?

In un PowerShell da amministratore, imposta il servizio ssh-agent su Automatico e avvialo. In Git Bash esegui eval "$(ssh-agent -s)" come su Linux.

Fonti

Altro in Messaggi di errore

Tutte le guide