« Could not open a connection to your authentication agent » : résoudre l'erreur

ssh-add n'a pas trouvé de ssh-agent en cours d'exécution, car la variable SSH_AUTH_SOCK n'est pas définie dans ce shell. Démarrez un agent avec eval "$(ssh-agent -s)" et relancez ssh-add. Le eval compte : lancer ssh-agent seul se contente d'afficher les variables sans les définir. La même ligne fonctionne dans Git Bash. Dans PowerShell, démarrez plutôt le service Windows ssh-agent.

Mis à jour le . Exécuté avec OpenSSH 10.3 sur macOS et OpenSSH 10.0 sous Debian 13, avec des agents temporaires et une clé jetable.

La solution sous Linux et macOS

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

La première ligne démarre l'agent et définit deux variables dans votre shell actuel. La dernière ligne liste les clés chargées. Dans le shell fish, utilisez eval (ssh-agent -c).

Diagnostiquer

echo "$SSH_AUTH_SOCK"
ssh-add -l
echo $?
Code de sortie et texteSignification
0, liste des clésL'agent fonctionne et contient des clés
1, The agent has no identities.L'agent fonctionne et est vide. Lancez ssh-add
2, Could not open a connection to your authentication agent.SSH_AUTH_SOCK n'est pas défini ou est vide
2, Error connecting to agent: No such file or directoryLa variable pointe vers un socket qui n'existe plus

Raisons courantes

Vous avez lancé ssh-agent sans eval

Lancé seul, ssh-agent démarre un processus en arrière-plan et affiche des commandes shell. Rien ne les exécute : votre shell n'apprend donc rien et l'erreur reste :

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

Chaque essai de ce genre laisse aussi un agent inutilisé en marche. pgrep -l ssh-agent les liste, et vous pouvez arrêter les doublons avec kill.

Un nouveau shell, tmux, cron ou sudo

Les variables n'existent que dans le shell où vous avez lancé eval et dans les programmes qu'il démarre. Un autre terminal, une tâche cron ou une session tmux existante ne les ont pas. sudo les supprime généralement.

Pour réutiliser un même agent depuis plusieurs shells, donnez-lui un chemin de socket fixe :

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")"; }

Cela peut aller dans ~/.bashrc ou ~/.zshrc. Cela ne démarre un agent que si aucun ne répond sur ce socket. De nombreux bureaux Linux et macOS démarrent déjà un agent à l'ouverture de session : vérifiez d'abord echo "$SSH_AUTH_SOCK" dans un terminal neuf. Sur un Mac, voir ssh-agent et le trousseau macOS.

Un socket périmé

Les anciens shells gardent l'ancien chemin après l'arrêt de l'agent, ou une session tmux rattachée en garde un d'une connexion antérieure :

ls -l "$SSH_AUTH_SOCK"

Si le fichier a disparu, démarrez un nouvel agent comme indiqué plus haut, ou, dans tmux, redéfinissez la variable depuis un nouveau shell.

Vous êtes sur un serveur et attendez l'agent de votre portable

Sans agent forwarding, une connexion à un serveur n'a pas d'agent, et ce message y est normal. Si vous voulez qu'une clé du serveur serve, démarrez un agent là-bas. Pour l'agent forwarding, lisez d'abord ses risques, car quiconque a root sur ce serveur peut utiliser vos clés redirigées pendant que vous êtes connecté.

Windows

Windows exécute l'agent comme un service, désactivé par défaut. PowerShell n'a pas besoin d'eval. Dans un PowerShell administrateur :

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

La dernière ligne doit afficher Running. Ensuite, dans un PowerShell normal :

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

Dans Git Bash, utilisez plutôt les commandes du début de cette page. Elles lancent l'agent fourni avec Git, distinct du service Windows.

Avez-vous besoin de l'agent ?

Pas toujours. SSH utilise directement les fichiers de clé, et ne demande la phrase secrète qu'à chaque fois. Pour charger automatiquement une clé dans un agent à la première utilisation, ajoutez ceci à ~/.ssh/config :

Host *
  AddKeysToAgent yes

Questions

Pourquoi ssh-add fonctionne dans un terminal et pas dans un autre ?

Les variables de l'agent n'existent que dans le shell où vous avez lancé eval et dans les programmes qu'il démarre. Lancez l'agent depuis ~/.bashrc ou ~/.zshrc avec un socket fixe, ou utilisez l'agent que votre bureau démarre à la connexion.

Faut-il ssh-agent pour utiliser des clés SSH ?

Non. ssh lit directement les fichiers de clés et demande la phrase de passe à chaque fois. L'agent garde seulement les clés déverrouillées en mémoire, pour que vous tapiez la phrase de passe une seule fois.

Comment démarrer ssh-agent sous Windows ?

Dans un PowerShell administrateur, passez le service ssh-agent en Automatique et démarrez-le. Dans Git Bash, lancez eval "$(ssh-agent -s)" comme sous Linux.

Sources

Autres guides : Messages d'erreur

Tous les guides