Diyelim ki alice
2 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 repo1
verepo2
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/config
dosyası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 keys
bölümüne gittiniz vealice_github.id_rsa.pub
Bu noktada git pull origin master
sorunsuz 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ı repo2
github.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.com
etki alanında barındırılıyorsa, ssh hangi anahtarı kullanacağını nasıl söyleyebilir ?
Kişisel .ssh/config
dosya işaret ettiği github.com
ve '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.com
verepo2.github.com
İlk şey .git/config
repo 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/config
dosyanı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 master
her 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.