Disons que alice
c'est un utilisateur de github.com, avec 2 référentiels privés ou plus repoN
. Pour cet exemple, nous travaillerons avec seulement deux référentiels nommés repo1
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:
Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
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écommande origin
pour qu'elle ressemble à ceci:
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
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 "alice@alice.com"
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 vers github.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
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
Pour repo2
[remote "origin"]
url = "ssh://git@repo2.github.com/alice/repo2.git"
Et puis, sur votre .ssh/config
fichier, vous allez maintenant pouvoir entrer une configuration pour chaque sous-domaine :)
Host repo1.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
IdentitiesOnly yes
Host repo2.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
IdentitiesOnly yes
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.