J'ai également rencontré ce problème lorsque j'ai tenté de déployer du code à l'aide de l'outil Capistrano . C'est très frustrant. Voici deux méthodes que je connais pour résoudre ce problème.
Méthode 1 : Ajouter tous connus à l'agent SSH.
Une solution que j'ai trouvée est de lancer ssh-add
avec le -A
qui ajoute toutes les identités connues à l'agent SSH en utilisant toutes les phrases de passe stockées dans votre trousseau comme ceci :
ssh-add -A
Maintenant cela fonctionne mais ne persiste pas à travers les redémarrages. Donc, si vous voulez ne plus jamais vous soucier de cela, ouvrez simplement le dossier de votre utilisateur ~/.bash_profile
comme ceci :
nano ~/.bash_profile
Et ajoutez cette ligne en bas :
ssh-add -A 2>/dev/null;
Maintenant, lorsque vous ouvrez une nouvelle fenêtre de Terminal, tout devrait être bon !
Méthode 2 : Ajouter seulement les clés SSH qui sont dans le trousseau de clés à l'agent.
Ainsi, alors que le ssh-add -A
devrait fonctionner pour la plupart des cas de base, j'ai rencontré un problème récemment où j'avais 6-7 boîtes Vagrant (qui utilisent des clés/identités SSH pour l'accès) installées sur une machine en plus de l'option plus commune id_rsa.pub
en place.
Pour faire court, j'ai fini par être verrouillé sur un serveur distant en raison d'un trop grand nombre d'essais infructueux basés sur les clés/identités SSH, car l'accès au serveur était basé sur un mot de passe et les clés/identités SSH sont des clés/identités SSH. L'agent SSH a donc essayé todo de mes clés SSH, a échoué et je n'ai même pas pu accéder à l'invite du mot de passe.
Le problème est que ssh-add -A
ajoutera arbitrairement toutes les clés/identités SSH dont vous disposez à l'agent, même si cela n'est pas nécessaire, comme dans le cas des boîtes Vagrant.
Après de nombreux essais, ma solution a été la suivante.
Tout d'abord, si vous avez ajouté plus de clés/identités SSH à votre agent que nécessaire, comme le montre l'exemple suivant ssh-add -l
puis les purger tous de l'agent comme ceci :
ssh-add -D
Une fois cela fait, démarrez l'agent SSH en tant que processus d'arrière-plan comme suit :
eval "$(ssh-agent -s)"
Maintenant, ça devient bizarre et je ne sais pas trop pourquoi. Dans certains cas, vous pouvez ajouter spécifiquement le ~/.ssh/id_rsa.pub
clé/identité à l'agent comme suit :
ssh-add ~/.ssh/id_rsa.pub
Tapez votre phrase de passe, appuyez sur Return et vous devriez être prêt à partir.
Mais dans d'autres cas, il suffit de l'exécuter pour que la clé/identité soit ajoutée :
ssh-add -K
Si tout cela a fonctionné, tapez ssh-add -l
et vous devriez voir une seule clé/identité SSH listée.
Tout va bien ? Maintenant, ouvrez votre .bash_profile
:
nano ~/.bash_profile
Et ajoutez cette ligne au bas de l'écran ; commentez ou supprimez la ligne -A
si vous l'avez mis en place :
ssh-add -K 2>/dev/null;
Cela permettra à la clé/identité SSH d'être rechargée dans l'agent SSH à chaque démarrage/redémarrage.
MISE À JOUR : Apple a maintenant ajouté une UseKeychain
aux options de configuration de SSH ouvert et considère que ssh-add -A
une solution également.
À partir de macOS Sierra 10.12.2, Apple (je suppose) a ajouté un UseKeychain
pour les configurations SSH. En consultant la page de manuel (via man ssh_config
) montre les informations suivantes :
UseKeychain
On macOS, specifies whether the system should search for
passphrases in the user's keychain when attempting to use a par-
ticular key. When the passphrase is provided by the user, this
option also specifies whether the passphrase should be stored
into the keychain once it has been verified to be correct. The
argument must be ``yes'' or ``no''. The default is ``no''.
Ce qui revient à dire qu'Apple considère que la solution consiste à ajouter ssh-add -A
à votre .bash_profile
comme expliqué dans ce ticket Open Radar ou en ajoutant UseKeychain
comme l'une des options d'un programme par utilisateur ~/.ssh/config
.