Diyelim ki alice2 veya daha fazla özel depoya sahip bir github.com kullanıcısı repoN. Bu örnek için sadece iki adlandırılmış depoları ile çalışacağız repo1verepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
Muhtemelen bir sunucuya veya birden fazla sunucuya şifre girmeden bu depolardan çekmeniz gerekir. git pull origin masterÖrneğin gerçekleştirmek istiyorsunuz ve bunun bir şifre sormadan gerçekleşmesini istiyorsunuz.
Ssh-agent ile uğraşmaktan hoşlanmıyorsunuz ~/.ssh/config, ssh istemcinizin Hostname ve kullanıcı adına bağlı olarak hangi özel anahtarı kullanacağını bilmesini sağlayan bir dosya hakkında keşfettiniz (veya şimdi keşfediyorsunuz) , bu:
Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
Böylece devam (alice_github.id_rsa, alice_github.id_rsa.pub)ettiniz ve anahtar çiftinizi yarattınız, daha sonra deponuzun .git/configdosyasına da gittiniz ve uzaktan kumandanızın URL'sini şu şekilde değiştirdiniz origin:
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
Ve sonunda depo Settings > Deploy keysbölümüne gittiniz vealice_github.id_rsa.pub
Bu noktada git pull origin mastersorunsuz bir şifre girmeden yapabilirsiniz .
ama ikinci depo ne olacak?
repo2İçgüdünüz bu anahtarı kapmak ve anahtarları konuşlandırmaya eklemek olacaktır, ancak github.com hata verecek ve anahtarın zaten kullanıldığını söyleyecektir.
Şimdi gidip başka bir anahtar oluşturuyorsunuz ( ssh-keygen -t rsa -C "alice@alice.com"elbette şifreler olmadan) ve bu bir karışıklık haline gelmeyecek, şimdi anahtarlarınızı şu şekilde adlandıracaksınız:
repo1 anahtar çifti: (repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2 anahtar çifti: (repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
Şimdi yeni ortak anahtarı repo2github.com adresindeki Anahtarları dağıtma yapılandırmasına koyacaksınız, ancak şimdi başa çıkmak için bir ssh sorununuz var.
Havuzlar aynı github.cometki alanında barındırılıyorsa, ssh hangi anahtarı kullanacağını nasıl söyleyebilir ?
Kişisel .ssh/configdosya işaret ettiği github.comve 's zaman çekme yapmak kullanılacak olan anahtar bilmiyor.
Bu yüzden github.com ile bir numara buldum. Farklı github.com alt etki alanı içinde her depo ömürleri, bu gibi durumlarda, onlar olacağını Eğer ssh istemcisi söyleyebilir repo1.github.comverepo2.github.com
İlk şey .git/configrepo klonlarınızdaki dosyaları düzenlemektir , bu yüzden bunun yerine şöyle görünürler:
Repo1 için
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
Repo2 için
[remote "origin"]
url = "ssh://git@repo2.github.com/alice/repo2.git"
Ve sonra, .ssh/configdosyanızda, şimdi her bir alt alan için bir yapılandırma girebileceksiniz :)
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
Artık git pull origin masterher iki havuzdan da şifre girmeden edinebilirsiniz .
Birden fazla makineniz varsa, anahtarları makinelerin her birine kopyalayabilir ve yeniden kullanabilirsiniz, ancak makine başına 1 anahtar üretmek ve repo üretmek için bacak işini yapmanızı tavsiye ederim. İşleyecek çok daha fazla anahtarınız olacak, ancak birinden ödün verilirse daha az savunmasız kalacaksınız.