Erreur Capistrano net-ssh requires ed25519 bcrypt_pbkdf gems sur MacOs

2 minutes
astuce console bash terminal ssh capistrano


Vous avez déja rencontré cette erreur sur MacOs ? Ça vous bloque pour les déploiements Capistrano ?

Capistrano est un outils qui permet d'automatiser les déploiements.
Il se connecte en SSH au serveur spécifier et effectue les actions de déploiement.
Par exemple, il permet d'effectuer la liste d'action nécessaire comme lancer les migrations Doctrine, vider le cache, régénérer les fichiers de styles et les scripts optimisés, etc...
Bref c'est super pratique et il est aujourd'hui énormement utilisé dans la communauté PHP (Symfony, Zend, ...).

Il est codé en Ruby et utilise net-ssh pour se connecter aux serveur en SSH.
Il a donc besoin que les clés publiques SSH soient enregistré dans l'agent d'authentification du système.

Sur MacOs, par défaut, les clés sont enregistrés que pour la session en cours, et c'est ça qui pose problème.
Cette erreur est commune, mais il y a des moyens simples de la résoudre.

L'erreur complète

Voici l'erreur complète :

NotImplementedError: OpenSSH keys only supported if ED25519 is available
net-ssh requires the following gems for ed25519 support:
 * ed25519 (>= 1.2, < 2.0)
 * bcrypt_pbkdf (>= 1.0, < 2.0)
See https://github.com/net-ssh/net-ssh/issues/565 for more information
Gem::LoadError : "Could not find 'ed25519' (~> 1.2) among 32 total gem(s)
Checked in 'GEM_PATH=/[...]/.gem/ruby/2.3.0:/Library/Ruby/Gems/2.3.0:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/gems/2.3.0', execute `gem env` for more information"

Tasks: TOP => deploy:check => git:check => git:wrapper
(See full trace by running task with --trace)
The deploy has failed with an error: OpenSSH keys only supported if ED25519 is available
net-ssh requires the following gems for ed25519 support:
 * ed25519 (>= 1.2, < 2.0)
 * bcrypt_pbkdf (>= 1.0, < 2.0)
See https://github.com/net-ssh/net-ssh/issues/565 for more information
Gem::LoadError : "Could not find 'ed25519' (~> 1.2) among 32 total gem(s)
Checked in 'GEM_PATH=/[...]/.gem/ruby/2.3.0:/Library/Ruby/Gems/2.3.0:/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/gems/2.3.0', execute `gem env` for more information"

Solution 1

La solution la plus simple, c'est qu'à chaque démarrage du Mac, il faut ajouter la clé public à l'agent d'authentification :

$ ssh-add [path de la clé]

Pour vérifié que la clé a bien été ajouté :

$ ssh-add -l

Il est possible de mettre ça dans le fichier .bashrc ou .bash_profile pour que ce soit lancé à chaque démarrage.
Mais ce n'est pas la meilleure solution.
Ça me permet de présenter quelque commande, c'est toujours bien de les connaître ;).

Solution 2 (la meilleure)

Cette solution est de loin la meilleure et la plus générique :

Créez le fichier ~/.ssh/config pour ajouter le contenu qui suit :

Host *
    UseKeychain yes
    AddKeysToAgent yes

Ce fichier n'ajoute pas directement les clés dans l'agent d'authentification. Il le fait une fois qu'on demande à utiliser les clés.
C'est à dire quand nous on se connecte en SSH par exemple.
C'est pour ça que la commande ssh-add -l retourne rien. Par contre après un appel SSH, elle retournera bien la clé utilisé.

Par contre vous devrez saisir à nouveau votre mot de passe la première fois pour la session en cours.
À chaque reboot faudra recommencer.

Ajouter un commentaire

Article précédent