Agence web » Actualités du digital » Qu'est-ce que le transfert d'agent SSH et comment l'utilisez-vous?

Qu'est-ce que le transfert d'agent SSH et comment l'utilisez-vous?

Funtap / Shutterstock

Le transfert d'agent SSH vous permet d'utiliser votre clé SSH locale privée à distance sans vous soucier de laisser des données confidentielles sur le serveur avec lequel vous travaillez. Il est intégré à sshet est facile à configurer et à utiliser.

Qu'est-ce qu'un agent SSH?

Votre clé SSH publique est comme votre nom d'utilisateur ou votre identité, et vous pouvez la partager avec tout le monde. Votre clé SSH privée est comme un mot de passe et est enregistrée localement sur votre ordinateur. Mais, c'est comme stocker vos mots de passe sur une note autocollante – n'importe qui peut les voir s'ils y ont accès. Donc, pour des raisons de sécurité, SSH vous demandera une phrase secrète lorsque vous générez vos clés (j'espère que vous n'avez pas sauté cette étape) et il utilisera cette phrase secrète pour crypter et décrypter votre clé privée.

Cependant, cela signifie que vous devrez saisir votre phrase secrète chaque fois que vous aurez besoin d'utiliser votre clé privée, ce qui deviendra ennuyeux. Pour gérer cela, la plupart des implémentations SSH utiliseront un agent, qui garde en mémoire votre clé déchiffrée. Cela signifie que vous n'aurez besoin de le déverrouiller qu'une seule fois et qu'il persistera jusqu'au redémarrage, vous permettant de vous connecter à vos serveurs en toute sécurité sans invite de phrase secrète.

Qu'est-ce que le transfert d'agent SSH?

Agent SSH expéditeur c'est comme aller plus loin. Par exemple, imaginez que vous vous connectez à un serveur distant et que vous souhaitez git pull du code que vous stockez sur Github. Vous souhaitez utiliser l'authentification SSH pour Github, mais vous ne voulez pas que vos clés privées sur ce serveur distant, uniquement sur votre machine.

Pour résoudre ce problème, vous pouvez ouvrir votre agent SSH local sur le serveur distant, lui permettant d'agir comme vous pendant que vous êtes connecté. Cela n’envoie pas vos clés privées sur Internet, même pendant qu’elles sont cryptées; il permet simplement à un serveur distant d'accéder à votre agent SSH local et de vérifier votre identité.

Cela fonctionne comme ceci: vous demandez à votre serveur distant d'extraire du code de Github, et Github dit "qui êtes-vous?" au serveur. Habituellement, le serveur consulterait son propre id_rsa fichiers pour répondre, mais à la place, il transmettra la question à votre ordinateur local. Votre machine locale répond à la question et envoie la réponse (qui n'inclut pas votre clé privée) au serveur, qui la renvoie à Github. Github ne se soucie pas que votre ordinateur local ait répondu à la question, il voit simplement que la réponse a été donnée et vous permet de vous connecter.

Comment activer le transfert d'agent SSH

Sur Mac et Linux, le transfert d'agent SSH est intégré à ssh, et le ssh-agent est lancé automatiquement. Tout ce que vous aurez à faire est de vous assurer que vos clés sont ajoutées à ssh-agent et configurer ssh pour utiliser le transfert.

Ajouter des clés à ssh-agent

Vous pouvez utiliser l'utilitaire ssh-add pour ajouter des clés à votre agent local. En supposant que votre clé privée est stockée dans id_rsa, tu peux courir:

ssh-add ~/.ssh/id_rsa

Vous pouvez également coller manuellement la clé plutôt que d'utiliser id_rsa. Vérifiez que la clé est correctement ajoutée avec:

ssh-add -L

Si c'est le cas, il devrait cracher votre clé.

Ajouter des clés sur macOS

Sur macOS, vous devrez plutôt exécuter:

ssh-add -K ~/.ssh/id_rsa

le -K flag stockera la clé dans le trousseau macOS, ce qui est nécessaire pour qu'il se souvienne de vos clés lors des redémarrages.

Autoriser le transfert dans la configuration de votre client

Ouvrez votre ~/.ssh/config fichier sur votre ordinateur local, ou créez-en un nouveau s'il est vide. Nous allons définir une nouvelle règle pour nous assurer que le transfert d'agent est activé pour le domaine de ce serveur:

Host example
  ForwardAgent yes

Vous devez remplacer example avec le nom de domaine ou l'adresse IP de votre serveur. Vous pouvez utiliser le caractère générique * pour l'hôte, mais vous transférez ensuite l'accès à vos clés privées à chaque serveur auquel vous vous connectez, ce qui n'est probablement pas ce que vous voulez.

Selon votre système d'exploitation, vous pouvez également avoir des fichiers de configuration à /etc/ssh/ssh_config pour macOS ou /etc/ssh_config pour Ubuntu. Ces fichiers peuvent remplacer le fichier de configuration utilisateur à ~/.ssh/config, alors assurez-vous que rien n'est en conflit. Lignes commençant par # sont commentés et n'ont aucun effet.

Vous pouvez également activer manuellement le transfert d'agent pour n'importe quel domaine à l'aide de ssh -A user@host, qui contournera tous les fichiers de configuration. Si vous voulez une méthode simple pour transférer sans toucher à la configuration, vous pouvez ajouter alias ssh="ssh -A" à vos paramètres bash, mais cela revient à utiliser un hôte générique, nous ne le recommandons donc pas pour tout ce qui est axé sur la sécurité.

Tester le transfert SSH

Si vous n'avez pas deux serveurs sous la main, le moyen le plus simple de tester si le transfert SSH fonctionne est d'ajouter votre clé publique de votre machine locale à votre profil Github et d'essayer de SSH à partir d'un serveur distant:

ssh git@github.com

Si cela a fonctionné, vous devriez voir votre nom d'utilisateur et vous devriez pouvoir pousser et extraire le code d'un dépôt sans jamais mettre de clés privées sur le serveur.

Configurer le transfert SSH pour les clients Windows

Étant donné que Windows n'est pas un système d'exploitation Unix, la configuration variera en fonction de la façon dont vous exécutez exactement ssh en premier lieu.

Si vous utilisez le sous-système Linux pour Windows, qui vous permet d'exécuter bash sous Windows, la configuration sera la même que sous Linux ou macOS, car elle virtualise entièrement une distribution Linux pour exécuter la ligne de commande.

Si vous utilisez Git Bash, la configuration est la même que sous Linux, mais vous devrez démarrer manuellement ssh-agent lorsque vous lancez le shell, ce que vous pouvez faire avec un script de démarrage dans .bashrc.

Si vous utilisez PuTTY, la configuration est assez simple. Dans la configuration, accédez à Connexion> SSH> Auth et activez «Autoriser le transfert d'agent».

Vous pouvez également ajouter votre fichier de clé privée à partir du même volet. PuTTY gérera l'agent SSH pour vous, vous n'avez donc pas à vous soucier des fichiers de configuration.

Que faire si le transfert SSH ne fonctionne pas

Assurez-vous que vous disposez réellement des clés SSH en premier lieu; sinon, vous pouvez exécuter ssh-keygen, qui placera votre clé privée dans ~/.ssh/id_rsa et votre clé publique ~/.ssh/id_rsa.pub.

Vérifiez que vos clés SSH fonctionnent correctement avec l'authentification standard et ajoutez-les à ssh-agent. Vous pouvez ajouter des clés avec ssh-add.

le ssh-agent doit également être en cours d'exécution. Sous macOS et Linux, il devrait démarrer automatiquement, mais vous pouvez vérifier qu'il fonctionne avec:

echo "$SSH_AUTH_SOCK"

S'il est correctement configuré, vous devriez voir un Listeners socket retourné.

Assurez-vous que vos fichiers de configuration sont correctement configurés pour inclure ForwardAgent yeset assurez-vous qu'aucun autre fichier de configuration n'écrase ce comportement. Pour vérifier quels fichiers de configuration SSH utilise, vous pouvez exécuter ssh en mode verbeux:

ssh -v git@github.com

Qui devrait afficher les fichiers de configuration utilisés. Les fichiers affichés plus loin dans cette liste ont priorité sur les fichiers précédents.

Et bien sûr, les options de ligne de commande remplacent les fichiers de configuration. Si le transfert d'agent ne fonctionne pas avec ssh -A, et vos clés sont correctement configurées dans votre agent, alors quelque chose d'autre ne va pas et vous devrez vérifier votre connexion aux serveurs de la chaîne.

★★★★★