Birden Çok SSH Ortak Anahtarını Kullanma


97

Unfuddle'da kişisel bir hesabım ve bir şirket hesabım var. Unfuddle SSH anahtarları yalnızca tek bir hesapta kullanılabilir, bu yüzden her iki hesap için dizüstü bilgisayarımda ayrı bir SSH anahtarı oluşturmam gerekiyor. ssh-keygen -t rsaFarklı isimlerle iki anahtar üretmek için koştum (kişisel varsayılan isim, şirket ise {company} _rsa). Şimdi sorun şu ki, varsayılan anahtarım her yerde kullanılıyormuş gibi görünüyor ve Git'te bireysel depolar için kullanılacak bir anahtarın nasıl belirtileceğini bulamıyorum.

Öyleyse sorum şu: Repo-repo temelinde kullanılacak bir SSH anahtarını nasıl belirleyebilirim?

Ben ssh_config (~ / .ssh / config) kurulumunu yaptım ama yine de işe yaramadı.

yapılandırma:

Host {personalaccount}.unfuddle.com
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/id_rsa

Host {companyaccount}.unfuddle.com
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/cage_rsa

Git repo config dosyam şirketimdeki bir repo için unfuddle hesabı şöyle görünüyor:

[remote "origin"]
     url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
     fetch = +refs/heads/*:refs/remotes/origin/*

Bu yüzden ssh config ya da git config ile ilgili bir sorun olup olmadığından emin değilim.


Ssh yapılandırmanız doğru görünüyor, benzer bir yapılandırma kullanıyorum.
Paŭlo Ebermann

Yanıtlar:


109

Anahtarınızı yükleyen etkin bir ssh aracınız varsa id_rsa, o zaman sorun muhtemelen ssh'ın o anahtarı sunmasıdır. Unfuddle muhtemelen (örn kimlik doğrulaması için kabul sshd ) ama (onlar yetkilendirme, Gitolite benzer muhtemelen bir şey için kullanmak ne olursa olsun iç yazılımda örneğin) şirket depoları erişmek için izin reddeder. Belki de kişisel anahtarınızı şirket hesabına eklemenin bir yolu vardır (birden fazla kişi aynı corp_rsaortak ve özel anahtar dosyayı paylaşmıyor, değil mi?).


IdentitiesOnly .ssh/configYapılandırma kelime anahtarlarını sınırlamak için kullanılabilir ssh uzak için teklifler sshd sadece aracılığıyla belirtilenlere IdentityFileanahtar kelimeler (yani etkin bir yüklenecek başına herhangi bir ek tuşlarını kullanmak reddeder ssh-agent ).

Bu .ssh/configbölümleri deneyin :

Host {personalaccount}.unfuddle.com
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host {companyaccount}.unfuddle.com
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

Ardından, Git URL'lerini şunun gibi kullanın:

git@{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
git@{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git

.ssh/configMekanizmadan tam olarak yararlanmak istiyorsanız, kendi özel ana bilgisayar adınızı girebilir ve varsayılan kullanıcı adını değiştirebilirsiniz:

Host uf-mine
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host uf-comp
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

Ardından, Git URL'lerini şunun gibi kullanın:

uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git

7
Aynı Unfuddle alt etki alanında birden fazla hesabınız varsa (farklı SSH anahtarlarıyla), ikinci yöntemi kullanmanız gerekir.
leolobato

IdentityOnly benim gitolit kurulumumda benim için çok önemliydi, teşekkürler!
Koen.

1
Müthiş bu, tüm anahtarlarımın github'a gönderilmesi sorununu düzeltir. Ancak, OS XI'de her zaman şifremi yazmam gerekiyor. Sadece config içinde belirtilen anahtarı kullanıp ssh aracısını kullanmaya devam etmenin bir yolu var mı?
Drew,

1
@Drew: Anahtar zaten aracıya yüklenmişse, komut hala aracıdan onu çekmelidir. Anahtarınızın önceden yüklendiğinden emin misiniz? ssh-add -lGit ana bilgisayar takma adınızı kullanmadan önce kontrol edin . Ayrıca, ortak anahtar dosyasının da bulunması gerekir, böylece ssh , ssh aracısının depoladığı anahtarı tanıyabilir . Kayıp bir .pubdosyayı bir komutla yeniden oluşturabilirsiniz ssh-keygen -f blah -y > blah.pub.
Chris Johnsen

Evet orada. IdentitiesOnly çağrısını kaldırdığımda, 4 farklı anahtar gönderir (parola sormadan doğru olanı da dahil). Aramayı eklediğimde, sadece bir anahtar gönderir ancak her seferinde parola ister. OSX'e parola değerini anahtar zincirinde saklamasını söylediğimde bile.
Drew 18-13

3

man ssh_config

Gibi bir şey

Host personal_repo
  User personal
  IdentityFile .ssh/personal_rsa

Host company_repo
  User company
  IdentityFile .ssh/company_rsa

personal_repoGit deponuzda ana bilgisayar olarak kullanın .


Tass, yukarıda yaptığım değişiklikleri gözden geçirir misin? Ssh_config ve git config'imi ekledim.

Hostsadece bir tanımlayıcıdır - tam alan adına gerek yoktur. Bu muhtemelen bazı gizli hatalar yaratır. Bunu değiştirirseniz, git config içerisinde tam adı yazmanız gerekmez.

bakıcı için, user = git ve host gitorious.org: örn: git@gitorious.org: ~ revelut / qt / bruce-sandbox-qt.git Hostunuzda URL'nin bir bölümünü nasıl eşleştiriyorsunuz? (genellikle ~ benim için isyan)

@Tass Öyleyse, SSH yapılandırmasına company_unfuddle ismini verirseniz, URL'm git gitmeli @ company_unfuddle: {company} /overall.git? @ Bruce - Ne sorduğunuzu bilmiyorum. Biraz daha genişletebilir misin?

3

IdentityFile ve IdentitiesOnly sadece iyi çalışır. Beni rahatsız eden, bağlanmak için farklı ana bilgisayar adlarını kullanmayı hatırlatmak zorunda kalmamı ve iletilen ajan bağlantısının hala tüm anahtarları tutması gerektiği anlamına gelir; .

Yakın zamanda kullanmaya başladım:

https://github.com/ccontavalli/ssh-ident

ssh etrafındaki bir sarmalayıcıdır:

  • tanımladığınız her bir kimlik için tamamen ayrı bir aracı tutar.
  • ajanları giriş oturumlarında otomatik olarak paylaşır, .bashrc'nizde yapabileceğiniz hiçbir şey yoktur.
  • aracıya ve ilgili anahtarları, ilk ihtiyacınız olduğunda talep üzerine yükler.
  • Hangi aracı kullanacağınızı ssh komut satırına (ana bilgisayar adı ve benzeri) veya geçerli çalışma dizininize göre belirler. Bu özellikle, yaptığım işe bağlı olarak farklı yollardan çalışma eğiliminde olduğum için kullanışlıdır.

0

İşte ssh agent'ı kullanmak istiyorsanız uygun bir yol:

# Create public keys to make sure they exist
# this is a must if you use ssh agent forwarding
# or want to use ssh-agent at all
ssh-add -L | grep personal > ~/.ssh/personal_identity.pub
ssh-add -L | grep company > ~/.ssh/company_identity.pub


# Add to ~/.ssh/config
Host {personalaccount}.unfuddle.com
  IdentityFile ~/.ssh/personal_identity.pub

Host {companyaccount}.unfuddle.com
  IdentityFile ~/.ssh/company_identity.pub

Açıklama: ~ / .ssh dizininizde özel anahtarınız varsa, ssh-agent kullanılmayacak. Bu yüzden başka bir isim altında ortak anahtar yaratıyoruz, böylece ssh ssh-agent kullanmak zorunda kalıyor. Bu ayrıca, özel anahtarlara erişiminiz olmadığında da yardımcı olur (örneğin, ssh agent yönlendirme)


bu olabilir ssh-add -L, olmayabilir ssh-agent.
Ağustos’ta

@ives teşekkürler, sabit
Vanuan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.