J'ai du mal à faire en sorte que deux clés SSH / comptes GitHub différents fonctionnent correctement ensemble. J'ai la configuration suivante:
Repos accessibles à partir d'un seul compte en utilisant [email protected]:accountname
Repos accessibles depuis un autre compte en utilisant [email protected]:anotheraccount
Chaque compte a sa propre clé SSH. Les deux clés SSH ont été ajoutées et j'ai créé un fichier de configuration. Je ne pense pas que le fichier de configuration soit correct cependant. Je ne sais pas trop comment spécifier que les dépôts accédés en utilisant [email protected]:accountname
doivent utiliser id_rsa
et [email protected]:anotheraccount
doivent utiliser id_rsa_anotheraccount
.
git pull
continuait à échouer et à demander le mot de passe de l'école, malgré des fichiers d'identité distincts, "IdentitiesOnly = yes", des domaines et des noms d'hôtes distincts, tous présents dansssh-add -l
... La clé uni était "la première" quelle que soit cette configuration. J'ai dû déplacer sa section en dessous des autres dans .ssh / config, et maintenant àgit pull
partir des deux comptes GitHub réussit sans demander le mot de passe uni ssh.Réponses:
La réponse d'Andy Lester est exacte mais j'ai trouvé une étape supplémentaire importante que je devais faire pour que cela fonctionne. En essayant de mettre en place deux profils, un pour le personnel et un pour le travail, j'ai
~/.ssh/config
été à peu près comme suit:Mon profil professionnel n'a pas pris jusqu'à ce que j'aie fait un
ssh-add ~/.ssh/work_rsa
. Après cela, les connexions à github ont utilisé le profil correct. Auparavant, ils utilisaient par défaut la première clé publique.Pour Impossible d'ouvrir une connexion à votre agent d'authentification lors de l'utilisation
ssh-add
,vérifiez: https://stackoverflow.com/a/17695338/1760313
la source
ssh-add
c'est ce qui me manquait.IdentitiesOnly yes
à laHost *
section de votre~/.ssh/config
fichier. Cela indique à ssh d'utiliser réellement les fichiers d'identité que vous spécifiez, plutôt que de spammer le serveur avec tous.J'ai récemment dû le faire et j'ai dû passer au crible toutes ces réponses et leurs commentaires pour finalement rassembler les informations, donc je vais tout mettre ici, dans un seul message, pour votre commodité:
Étape 1: touches ssh
Créez les paires de clés dont vous aurez besoin. Dans cet exemple, je me suis nommé par défaut / original 'id_rsa' (qui est la valeur par défaut) et mon nouveau 'id_rsa-work':
Étape 2: configuration ssh
Configurez plusieurs profils ssh en créant / modifiant ~ / .ssh / config . Notez les valeurs légèrement différentes de l'hôte:
Étape 3: ssh-add
Vous pouvez ou non avoir à le faire. Pour vérifier, répertoriez les empreintes digitales d'identité en exécutant:
Si vos entrées ne sont pas là, lancez:
Étape 4: test
Pour tester que vous avez tout fait correctement, je suggère la vérification rapide suivante:
Notez que vous devrez changer le nom d'hôte (github / work.github) en fonction de la clé / identité que vous souhaitez utiliser. Mais maintenant, vous devriez être prêt à partir! :)
la source
Disons que
alice
c'est un utilisateur de github.com, avec 2 référentiels privés ou plusrepoN
. Pour cet exemple, nous travaillerons avec seulement deux référentiels nommésrepo1
etrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
Vous devez être de tirer de ces référentiels sans entrer un mot de passe probablement sur un serveur ou sur plusieurs serveurs. Vous voulez effectuer
git pull origin master
par exemple, et vous voulez que cela se produise sans demander de mot de passe.Vous n'aimez pas traiter avec ssh-agent, vous avez découvert (ou vous découvrez maintenant)
~/.ssh/config
un fichier qui permet à votre client ssh de savoir quelle clé privée utiliser en fonction du nom d'hôte et du nom d'utilisateur, avec une simple entrée de configuration qui ressemble à ce:Donc, vous êtes allé de l'avant et avez créé votre
(alice_github.id_rsa, alice_github.id_rsa.pub)
paire de clés, vous êtes également allé dans le.git/config
fichier de votre référentiel et vous avez modifié l'URL de votre télécommandeorigin
pour qu'elle ressemble à ceci:Et enfin, vous êtes allé à la
Settings > Deploy keys
section du référentiel et ajouté le contenu dealice_github.id_rsa.pub
À ce stade, vous pouvez le faire
git pull origin master
sans entrer de mot de passe sans problème.mais qu'en est-il du deuxième référentiel?
Donc, votre instinct sera de récupérer cette clé et de l'ajouter aux
repo2
clés de déploiement, mais github.com se trompera et vous dira que la clé est déjà utilisée.Maintenant, vous allez générer une autre clé (en utilisant
ssh-keygen -t rsa -C "[email protected]"
sans mot de passe bien sûr), et pour que cela ne devienne pas un gâchis, vous allez maintenant nommer vos clés comme ceci:repo1
paire de clés:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2
paire de clés:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
Vous allez maintenant mettre la nouvelle clé publique sur
repo2
la configuration des clés de déploiement sur github.com, mais vous avez maintenant un problème ssh à résoudre.Comment ssh peut-il dire quelle clé utiliser si les référentiels sont hébergés sur le même
github.com
domaine?Votre
.ssh/config
fichier pointe versgithub.com
et il ne sait pas quelle clé utiliser quand il est temps de faire le pull.J'ai donc trouvé un truc avec github.com. Vous pouvez dire à votre client ssh que chaque référentiel vit dans un sous-domaine github.com différent, dans ces cas, ils seront
repo1.github.com
etrepo2.github.com
Donc, la première chose est de modifier les
.git/config
fichiers sur vos clones de référentiel, ils ressemblent donc à ceci:Pour repo1
Pour repo2
Et puis, sur votre
.ssh/config
fichier, vous allez maintenant pouvoir entrer une configuration pour chaque sous-domaine :)Vous pouvez désormais le faire
git pull origin master
sans saisir de mot de passe à partir des deux référentiels.Si vous avez plusieurs machines, vous pouvez copier les clés sur chacune des machines et les réutiliser, mais je vous conseille de faire le travail de jambe pour générer 1 clé par machine et repo. Vous aurez beaucoup plus de clés à manipuler, mais vous serez moins vulnérable si vous êtes compromis.
la source
.ssh/config
est l'étape cruciale - merci beaucoup pour celaJ'ai 2 comptes sur github, et voici ce que j'ai fait
linux
pour le faire fonctionner.Clés
ssh-keygen
, nommez-les correctement, afin de vous faciliter la vie.ssh-add path_to_private_key
Configuration
~ / .ssh / config
Définir l'URL à distance pour le dépôt:
Pour le repo dans l'hôte
github-kc
:Pour le repo dans l'hôte
github-abc
:Explication
Options en
~/.ssh/config
:Host
github- <identify_specific_user> L'hôte peut être n'importe quelle valeur qui pourrait identifier un hôte plus un compte, il n'a pas besoin d'être un véritable hôte, par exemple
github-kc
identifier un de mes comptes sur github pour mon ordinateur portable local,Lorsque vous définissez l'URL à distance pour un dépôt git, c'est la valeur à mettre après
git@
, c'est ainsi qu'un repo est mappé à un hôte, par exemplegit remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git
Host
]Hostname
spécifiez le nom d'hôte réel, utilisez simplement
github.com
pour github,User
gitl'utilisateur est toujours
git
pour github,IdentityFile
spécifier la clé à utiliser, il suffit de mettre le chemin d'accès d'une clé publique,
LogLevel
spécifiez le niveau de journal à déboguer, le cas échéant,
DEBUG3
donne les informations les plus détaillées.la source
ssh-add path_to_private_key
- probablement parce que l'agent n'est pas requis dans ce cas. Le fichier de configuration définit explicitement le chemin d'accès aux clés.ssh-add
car vos clés ne sont pas protégées par mot de passe ou (si vous êtes sur un Mac) le trousseau OSX le gère pour vous.ssh-add
vous évite d'avoir à saisir la phrase secrète à chaque fois que vous accédez à vos clés.Utilisez le
IdentityFile
paramètre dans votre~/.ssh/config
:la source
Une alternative peut-être plus simple à l'édition du fichier de configuration ssh (comme suggéré dans toutes les autres réponses), consiste à configurer un référentiel individuel pour utiliser une clé ssh différente (par exemple, non par défaut).
Dans le référentiel pour lequel vous souhaitez utiliser une autre clé, exécutez:
Et assurez-vous que votre clé est ajoutée à l'agent ssh, en exécutant:
Gardez à l'esprit que la commande ci-dessus n'ajoutera que la clé à l'agent ssh pour votre session en cours. Si vous voulez que cela fonctionne pour toujours, vous devez l'ajouter "en permanence" à votre agent ssh. Par exemple, voici comment le faire pour Ubuntu et ici pour OSX .
Il devrait également être possible de faire évoluer cette approche sur plusieurs référentiels à l'aide de la configuration globale de git et des inclusions conditionnelles ( voir l'exemple ).
la source
Dans mon cas, aucune des solutions ci-dessus n'a résolu mon problème, mais ssh-agent le fait. Fondamentalement, j'ai fait ce qui suit:
Générez une paire de clés à l'aide de ssh-keygen illustré ci-dessous. Il va générer une paire de clés (dans cet exemple
.\keyfile
et.\keyfile.pub
)ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile
Télécharger
keyfile.pub
vers le fournisseur gitps -ef | grep ssh-agent
si elle fonctionne déjà)ssh-add .\keyfile
pour ajouter des informations d'identificationgit clone git@provider:username/project.git
la source
J'ai passé beaucoup de temps à comprendre toutes les étapes. Décrivons donc étape par étape:
ssh-keygen -t rsa
. Donnez-lui une alternative commeproj1.id_rsa
et frappez sans aucun doute parce que vous n'avez pas besoin d'une phrase secrète.Ajouter une nouvelle section dans
.ssh/config
:Tenez compte de la première section et notez que
proj1.github.com
nous reviendrons à la section plus tard.ssh-add ~/.ssh/proj1.id_rsa
proj1.github.com
(exactement l'hôte du fichier de configuration).git clone [email protected]
.Un bon tutoriel.
Ne plaisante pas avec les hôtes
la source
id_rsa_proj1
etproj1_id_rsa
devraient en fait être les mêmes. Vous pouvez également ajouter la partie sur les.git/config
paramètres du didacticiel à votre réponse.proj1.id_rsa
vsproj1_id_rsa
J'ai utilisé,
Ça s'est bien passé.
Utilisez le paramètre ci-dessus dans votre fichier .ssh / config pour différentes clés rsa pour différents noms d'utilisateur.
la source
En complément de la réponse de @stefano, il est préférable d'utiliser la commande avec
-f
lors de la génération d'une nouvelle clé SSH pour un autre compte,Puisque le
id_rsa_work
fichier n'existe pas dans le chemin~/.ssh/
, et je crée ce fichier manuellement, et cela ne fonctionne pas :(la source
J'ai posté la technique que j'utilise pour y faire face ici
la source