Comment automatiser le démarrage de l'agent SSH et l'ajout de mes clés dans WSL2 sous Windows 11

OS: Windows 11 Version 10.0.22621 Build 22621
WSL version: 1.2.5.0 (WSL 2)
Linux distro: Ubuntu 22.04.2 LTS

J’exécute WSL2 sous Windows 11 dans une fenêtre Windows Terminal, et je me connecte souvent à un serveur distant via une authentification par clé SSH. Pour cela, chaque fois que j’ouvre une nouvelle fenêtre Windows Terminal (ou même un nouvel onglet dans un Terminal existant), je dois exécuter :

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

(il s’agit d’une clé sans phrase de passe). Cela devient très vite fastidieux. Existe-t-il un moyen d’automatiser le lancement de l’agent SSH et l’ajout de ma clé à chaque fois que je démarre une session WSL2 dans Windows Terminal ?


Source : Super User

Meilleure alternative (par rapport à la réponse initiale) basée sur l’absence de phrase de passe sur la clé

Vous avez posé une question sur le commentaire de @u1686_grawity :

Si c’est sans phrase de passe, avez-vous vraiment besoin de l’agent, par opposition au fait de laisser le client SSH charger la clé directement depuis un fichier ?

@u1686_grawity fait une remarque pertinente : la plupart des clients SSH vous permettent de spécifier un fichier de clé directement sans nécessiter d’agent.

Je me connecte souvent à un serveur distant via une authentification par clé SSH.

Vous ne mentionnez pas nécessairement comment vous vous connectez, mais si c’est avec la commande ssh standard, alors vous pouvez simplement spécifier votre fichier de clé en ligne de commande avec :

ssh -i ~/.ssh/my_key <username>@site

Dans ce cas, vous n’avez pas du tout besoin d’un ssh-agent en cours d’exécution.

Même si vous n’utilisez pas ssh directement, la plupart des outils SSH basés sur OpenSSH utiliseront également le même fichier ~/.ssh/config, ce qui signifie que vous pouvez même vous passer de spécifier le nom du fichier d’identité. Par exemple, créez un fichier ~/.ssh/config avec le contenu suivant :

Host <whatever_you_want_to_call_it>
  Hostname <hostname_or_ip>
  User <optional_username_if_different>
  IntentityFile ~/.ssh/my_key

Ensuite, vous pouvez simplement taper ssh <whatever_you_want_to_call_it> et tout le reste sera extrait de la configuration. D’autres outils comme sftp et scp fonctionneront également de la même manière.

Ancienne réponse (fonctionne également, mais nécessaire pour les clés avec mots de passe) :

La réponse de @Kolkhis fonctionnera certainement, mais si vous exécutez plusieurs shells (par exemple sous Tmux ou Windows Terminal), cela lancera une nouvelle instance de ssh-agent pour chaque shell. Dans votre cas, ce n’est pas si grave puisque votre clé n’a pas de mot de passe (bien que je vous déconseille également cette pratique, bien sûr). Cependant, pour les clés avec mots de passe, vous devrez le saisir à nouveau pour chaque shell que vous exécutez. Cela engendrera également un temps de démarrage et une consommation mémoire supplémentaires (bien que faibles).

Je recommande l’utilitaire Keychain de Daniel Robbins (également le créateur de Gentoo Linux). Ce petit utilitaire vérifie s’il existe déjà un ssh-agent en cours d’exécution, et si c’est le cas, il définit simplement les variables d’environnement appropriées pour pointer vers cet agent. Sinon, au premier lancement, il démarrera bien sûr un nouvel agent.

Il est disponible dans les dépôts par défaut de la plupart des distributions, y compris Ubuntu :

sudo apt install keychain

Ensuite, ajoutez ce qui suit à votre fichier ~/.bashrc :

eval $(keychain --eval my_key)

Si je me souviens bien, vous n’avez même pas besoin de spécifier le chemin vers la clé, sauf si elle ne se trouve pas dans le répertoire par défaut ~/.ssh/.