Recherche de site Web

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


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 pourriez rencontrer des problèmes de gestion des clés, notamment Git utilisant la mauvaise clé SSH et vous connectant à un autre compte.

Quel est le problème ?

Si vous n'avez pas de clé SSH du tout sur votre compte, vous obtiendrez presque certainement l'erreur suivante lorsque vous essayez de pousser :

Permission denied (publickey).

fatal: Could not read from remote repository.

C'est probablement l'erreur Git la plus courante, et la solution à cela 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é une clé SSH correctement. Si vous utilisez plusieurs comptes Git, vous pourriez 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 cela ne fonctionne toujours pas correctement ; même si votre dépôt git local est configuré pour utiliser la bonne adresse e-mail, si vous lui donnez la mauvaise clé, il vous authentifiera en tant que mauvais utilisateur. Cela est fondamentalement différent de la première erreur. Ce n'est pas "permission refusée", mais plutôt "permission refusée à ce compte".

Cela peut être un problème si vous avez plusieurs comptes et devez utiliser des clés séparées pour chacun d'entre eux. En raison du fonctionnement de l'authentification SSH, cela va quand même "vous connecter" au serveur distant de Git, mais en tant que mauvais utilisateur. Lorsque Github vérifie si cet utilisateur a accès au dépôt, cela échouera probablement, produisant ainsi l'erreur disant que votre compte n'a pas la permission d'utiliser votre propre dépôt.

La solution consiste à gérer correctement plusieurs clés SSH, afin que votre client git 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, assurez-vous que votre dépôt est configuré pour utiliser la bonne adresse e-mail et le bon nom d'utilisateur. Vous pouvez vérifier cela dans la configuration Git :

git config --list

Et définissez le nom et l'email pour ce dépôt (ou utilisez --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 n'avez pas de problèmes de clé SSH, cela peut être tout ce qui est nécessaire.

Édition de ~/.ssh/config

Si vous n'avez pas de clé existante que vous souhaitez déjà utiliser, vous devrez générer un nouveau fichier de clé pour votre compte. Si c'est le cas, vous devrez déplacer ou renommer la clé appropriée dans ~/.ssh afin qu'elle ne rentre pas en conflit avec votre clé par 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 éditer ~/.ssh/config et configurer un nouveau bloc Host pour Github qui pointe vers le fichier de clé que vous venez de créer. SSH utilisera cela pour sélectionner la clé SSH qu'il va utiliser.

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 d'hôte pour la nouvelle clé, vous ne devriez rien avoir à faire d'autre et vous pourrez maintenant vous connecter à Github. Si vous avez plusieurs blocs pour différentes clés, vous devrez modifier le distant de votre référentiel afin que github.com soit remplacé par le nom du bloc d'hôte dans le fichier de configuration 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é l'hôte SSH et configuré vos dépôts distants, Git devrait utiliser la bonne clé SSH lors de l'envoi. 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 à l'aide de la variable d'environnement GIT_SSH_COMMAND.

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. Sur Windows, cet emplacement peut varier considérablement en fonction du logiciel que vous utilisez pour Git. Par exemple, en utilisant le client GUI Fork, il était par défaut configuré pour utiliser l'agent SSH de Windows, mais j'avais configuré une nouvelle clé SSH qu'il utilisait à la place.