Comment supprimer des branches Git sur des référentiels locaux et distants - CloudSavvy IT
Agence web » Actualités du digital » Comment réparer Git en utilisant la mauvaise clé et le mauvais compte SSH

Comment réparer Git en utilisant la mauvaise clé et le mauvais compte SSH

Lors de la connexion à un serveur Git distant, comme Github, votre client doit s’authentifier à l’aide de jetons HTTPS ou SSH. Si vous utilisez ce dernier, vous pouvez rencontrer des problèmes avec la gestion des clés, y compris Git en utilisant la mauvaise clé SSH et en vous connectant à un compte différent.

Quel est le problème?

Si vous n’avez pas du tout de clé SSH sur votre compte, vous obtiendrez presque certainement l’erreur suivante en essayant de pousser :

Permission denied (publickey).
fatal: Could not read from remote repository.

C’est probablement l’erreur Git la plus courante, et la solution est simple : configurez une clé SSH pour votre compte.

Mais, vous pouvez également rencontrer un message d’erreur très similaire, même après avoir configuré correctement une clé SSH. Si vous utilisez plusieurs comptes Git, vous pouvez avoir cette erreur :

Permission to Username/Repository.git denied to otheraccount.
fatal: Could not read from remote repository.

Dans ce cas, Github a accepté votre clé SSH, mais elle ne fonctionne toujours pas correctement ; même si votre local git repo est configuré pour utiliser la bonne adresse e-mail, si vous lui donnez la mauvaise clé, il vous authentifiera en tant que mauvais utilisateur. Ceci est fondamentalement différent de la première erreur. Il ne s’agit pas d’une « autorisation refusée », mais plutôt d’une « autorisation refusée de rendre compte ».

Cela peut être un problème si vous avez plusieurs comptes et devez utiliser des clés distinctes pour chacun d’eux. En raison du fonctionnement de l’authentification SSH, elle vous « connectera » toujours au serveur distant de Git, mais en tant qu’utilisateur incorrect. Lorsque Github vérifie si cet utilisateur a accès au référentiel, il échouera probablement, produisant ainsi l’erreur indiquant que votre compte n’a pas la permission d’utiliser votre propre référentiel.

La solution consiste à gérer correctement plusieurs clés SSH, afin que votre git le client n’envoie pas la mauvaise clé au serveur. Vous pouvez le faire en modifiant les fichiers de configuration de SSH.

S’assurer que Git est correctement configuré

Tout d’abord, vous devez vous assurer que votre dépôt est configuré pour utiliser la bonne adresse e-mail et le bon nom d’utilisateur. Vous pouvez le vérifier à partir de la configuration Git :

git config --list

Et définissez le nom et l’adresse e-mail de ce référentiel (ou en utilisant --global pour le définir pour tous les dépôts):

git config user.name "Name"
git config user.email "email@gmail.com"

Si vous ne rencontrez pas de problèmes de clé SSH, cela peut suffire.

Modification de ~/.ssh/config

Si vous n’avez pas encore de clé existante que vous souhaitez utiliser, vous devrez générer un nouveau fichier de clé pour votre compte. Si vous le faites, vous devrez déplacer ou renommer le bon en ~/.ssh donc il n’est pas en conflit avec votre défaut id_rsa. Dans ce cas, nous allons créer une nouvelle clé nommée « github » :

ssh-keygen -t rsa -f ~/.ssh/github

Pour utiliser plusieurs clés SSH, vous devrez modifier ~/.ssh/config et configurez un nouveau bloc hôte pour Github qui pointe vers le fichier de clé que vous venez de créer. SSH l’utilisera pour sélectionner la clé SSH qu’il utilisera.

Host main
  Hostname github.com
  IdentityFile ~/.ssh/github
  IdentitiesOnly yes

Host old
  Hostname github.com
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

Si vous n’avez qu’un seul bloc hôte pour la nouvelle clé, vous ne devriez rien faire d’autre et pourrez vous connecter à Github maintenant. Si vous avez plusieurs blocs pour différentes clés, vous devrez modifier la télécommande de votre référentiel afin que github.com est remplacé par le nom du bloc hôte dans le fichier de configuration de SSH. Cela sélectionnera manuellement une clé plutôt que de s’appuyer sur une recherche conflictuelle.

git remote remove origin

git remote add origin git@main:username/repository.git

Dépannage

Après avoir configuré la configuration de l’hôte SSH et configuré vos télécommandes, Git doit utiliser la bonne clé SSH lors de la poussée. Si vous rencontrez toujours des problèmes, vous pouvez déboguer le problème en définissant manuellement la commande SSH que Git utilise pour une session shell en utilisant le GIT_SSH_COMMAND variable d’environnement.

GIT_SSH_COMMAND='ssh -i ~/.ssh/github -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Vous voudrez également vérifier et vous assurer que Git utilise la clé de l’endroit que vous attendez. Sous Windows, cet emplacement peut varier énormément en fonction du logiciel avec lequel vous utilisez Git. Par exemple, en utilisant le client GUI Fork, il utilisait par défaut l’agent Windows SSH, mais j’avais configuré une nouvelle clé SSH qu’il utilisait à la place.

★★★★★