web-dev-qa-db-fra.com

Problèmes de commutation de comptes Github sur le terminal

Cela fait un moment que je n'ai rien poussé vers GitHub. J'avais initialement configuré mon compte sur mon ordinateur et tout fonctionnait très bien. Ensuite, j'ai changé mon compte en un compte client (afin que je puisse pousser le code vers leur référentiel privé).

Cela fait un moment et maintenant je reviens à mon ancien compte et j'ai des problèmes. J'ai généré un nouveau rsa_key et suivi à peu près les instructions ici à un T.

Cependant, lorsque je tape: ssh -T [email protected] Je reçois:

Salut oldincorrectusername! Vous vous êtes authentifié avec succès, mais GitHub ne fournit pas d'accès Shell.

Je ne peux pas non plus pousser vers mes dépôts, car cet ancien nom d'utilisateur client n'est pas autorisé. J'ai vérifié deux fois mes clés ssh sur mon ordinateur et sur les paramètres de mon compte sur GitHub.

J'ai également défini mes variables de compte globales:

git config --global user.name "Firstname Lastname"
git config --global user.email "[email protected]"
git config --global github.user username
git config --global github.token 0123456789yourf0123456789token

Et il me donne toujours l'ancien nom d'utilisateur.

Aucune suggestion?

Merci,

32
goddamnyouryan

Le problème est que votre local ssh offre toujours votre "ancienne" clé SSH à GitHub. Cela se produit souvent lorsque vous avez une clé reconnue par GitHub (c'est-à-dire votre "ancienne" clé) chargée dans un ssh-agent mais que vous souhaitez utiliser une autre clé reconnue par GitHub (c'est-à-dire votre "nouvelle" clé ).

ssh propose les clés dans cet ordre:

  1. clés spécifiées qui ont été chargées dans l'agent
  2. d'autres clés qui ont été chargées dans l'agent
  3. clés spécifiées qui n'ont pas été chargées dans l'agent

Par "clés spécifiées", j'entends les clés spécifiées par le -i option de ligne de commande ou l'option de configuration IdentityFile (qui peut être fournie via ~/.ssh/config ou la -o option de ligne de commande).

Si votre "ancienne" clé est chargée dans l'agent, mais pas votre "nouvelle" clé, alors ssh proposera toujours votre "ancienne" clé (de la première ou de la deuxième catégorie) avant votre "nouvelle" "(Uniquement dans la dernière catégorie car elle n'est pas chargée), même lorsque vous spécifiez votre" nouvelle "clé avec -i/IdentitiesOnly.


Vous pouvez vérifier quelles clés sont chargées dans votre ssh-agent avec ssh-add -l. Si votre "ancienne" clé est répertoriée, vous pouvez résoudre le problème en la déchargeant de votre agent (assurez-vous également de décharger toutes les autres clés reconnues par GitHub, sauf peut-être votre "nouvelle" clé):

ssh-add -d ~/.ssh/old_key_file

Si vous utilisez Mac OS X, le système peut charger automatiquement votre "ancienne" clé si vous avez coché "Mémoriser le mot de passe dans mon trousseau" lorsque vous êtes invité à entrer le mot de passe à un moment donné; vous pouvez désactiver ce chargement automatique en supprimant l'entrée du trousseau pour la clé avec la commande
/usr/bin/ssh-add -K -d ~/.ssh/old_key_file. D'autres systèmes peuvent faire quelque chose de similaire, mais les commandes pour leur dire d'arrêter cela seront différentes.


Au lieu de décharger "l'ancienne" clé de votre agent, vous pouvez définir l'option de configuration IdentitiesOnly sur yes, pour indiquer à ssh d'ignorer la deuxième catégorie de clés ( clés chargées par l'agent non spécifiées). Votre ~/.ssh/config pourrait inclure une section comme celle-ci:

Host github.com
    User           git
    IdentityFile   ~/.ssh/id_rsa # wherever your "new" key lives
    IdentitiesOnly yes

De cette façon, peu importe si d'autres clés reconnues par GitHub sont chargées dans votre agent; ssh n'offrira toujours que votre "nouvelle" clé.

Si vous prévoyez d'avoir besoin d'accéder aux référentiels des deux comptes GitHub et que vous ne souhaitez pas avoir à modifier le fichier de configuration chaque fois que vous souhaitez basculer entre les comptes GitHub, vous pouvez configurer votre ~/.ssh/config comme ça:

Host clientname.github.com
    HostName      github.com
    IdentityFile ~/.ssh/client_id_rsa  # or wherever your "old" client key lives

Host github.com
    IdentityFile   ~/.ssh/id_rsa        # or wherever your "new" key lives

Host github.com *.github.com
    User           git
    Hostname       github.com
    IdentitiesOnly yes

Utilisez ensuite des URL comme github.com:GitHubAccount/repository pour vos référentiels et URL comme clientname.github.com:GitHubAccount/repository pour les référentiels de votre client (vous pouvez mettre le git@ préfixez si vous le souhaitez, mais ce n'est pas nécessaire car les entrées ci-dessus définissent la variable de configuration User).

58
Chris Johnsen