Comment utiliser une clé SSH privée différente pour les commandes Git Shell
L’utilisation de clés SSH est plus sécurisée que les mots de passe, et cela s’applique également à Git. Cependant, contrairement à un mot de passe, il est plus difficile de modifier votre clé SSH ou de gérer plusieurs clés. Cependant, en modifiant votre configuration SSH, vous pouvez vous connecter à plusieurs référentiels Git avec différentes clés.
Sommaire
Comment SSH fonctionne-t-il avec Git ?
Git n’utilise pas seulement votre clé privée pour vous authentifier lorsque vous utilisez SSH au lieu de HTTPS, il établit en fait une véritable connexion SSH avec le serveur distant. Il le fait en silence, vous n’êtes donc peut-être pas au courant des commandes qu’il exécute, mais il utilise ssh
sous la capuche.
Parce qu’il utilise votre défaut ssh
commande, il agira comme si vous veniez de l’exécuter vous-même et utilisez votre clé par défaut dans ~/.ssh/id_rsa
. Ce n’est probablement pas ce que vous voulez si vous êtes ici en train de lire ceci, donc pour le changer, vous devrez modifier la configuration de SSH, pas celle de Git.
Créer une nouvelle clé SSH
Vous en aurez besoin d’un pour le faire en premier lieu, et c’est assez facile. Exécutez simplement ssh-keygen
et spécifiez un nouveau nom de clé avec le -f
drapeau. Cela créera une clé privée et une clé publique avec le .pub
extension.
ssh-keygen -t rsa -f ~/.ssh/github
Modification de ~/.ssh/config
Le fichier de configuration de SSH permet de définir des « hôtes » qui correspondent en fonction de ce à quoi vous vous connectez et autorisent la modification du fichier qui ssh
les usages.
Host github Hostname github.com IdentityFile ~/.ssh/id_rsa.github IdentitiesOnly yes
Cela vous permettra d’utiliser une clé SSH différente de votre clé principale pour toutes les requêtes envoyées à github.com
, mais que se passe-t-il si vous souhaitez utiliser deux clés différentes pour des référentiels Git distincts ? Par exemple, un pour votre compte professionnel et un pour votre compte personnel.
Eh bien, vous devrez définir deux configurations avec des noms différents, en utilisant le même hôte :
Host personal Hostname github.com IdentityFile ~/.ssh/githubpersonal IdentitiesOnly yes Host work Hostname github.com IdentityFile ~/.ssh/githubwork IdentitiesOnly yes
Cela entraînerait généralement une configuration conflictuelle, mais Git fournit un moyen de contourner ce problème. Si vous avez un référentiel distant comme Github lié à votre référentiel local, supprimez-le :
git remote remove origin
Ensuite, au lieu d’ajouter github.com
en tant que distant, remplacez-le par le nom de l’hôte dans le fichier de configuration SSH. Git le reconnaîtra et utilisera cet hôte SSH pour se connecter. Vous pouvez définir des hôtes distincts par référentiel.
git remote add origin git@personal:username/repository.git
Remplacement manuel
Si vous ne voulez pas jouer avec la configuration SSH, ou si vous voulez simplement la remplacer temporairement, Git fournit également le GIT_SSH_COMMAND
variable d’environnement. Vous pouvez
GIT_SSH_COMMAND='ssh -i ~/.ssh/github -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
Toutes les commandes Git que vous exécutez ensuite dans la même session shell utiliseront cette commande SSH au lieu de celle par défaut. Vous pouvez également définir un binaire SSH entièrement différent avec GIT_SSH
.