Ich habe ein persönliches Konto und ein Unternehmenskonto bei Unfuddle. On Unfuddle SSH-Schlüssel können nur für ein Konto verwendet werden. Daher muss auf meinem Laptop für beide Konten ein separater SSH-Schlüssel erstellt werden. Ich habe ssh-keygen -t rsa
ausgeführt, um zwei Schlüssel mit unterschiedlichen Namen zu generieren (personal ist der Standardname und company ist {company} _rsa). Das Problem ist nun, dass mein Standardschlüssel anscheinend überall verwendet wird und ich nicht herausfinden kann, wie ich einen Schlüssel für die Verwendung in Git für einzelne Repos angeben kann.
Meine Frage lautet also: Wie gebe ich einen SSH-Schlüssel an, der von Repo zu Repo verwendet werden soll?
Ich habe meine ssh_config (~/.ssh/config) eingerichtet, aber es scheint immer noch nicht zu funktionieren.
config:
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
Meine Git-Repo-Konfigurationsdatei für ein Repo in meinem Firmenkonto sieht folgendermaßen aus:
[remote "Origin"]
url = [email protected]{companyaccount}.unfuddle.com:{companyaccount}/overall.git
fetch = +refs/heads/*:refs/remotes/Origin/*
Ich bin mir also nicht sicher, ob etwas mit meiner ssh-Konfiguration oder meiner git-Konfiguration nicht stimmt.
Wenn Sie einen aktiven ssh-agent haben, der Ihren id_rsa
geladen hat, dann ist das Problem wahrscheinlich, dass ssh diesen Schlüssel zuerst anbietet. Unfuddle nimmt wahrscheinlich es für die Authentifizierung (zum Beispiel in sshd), aber für die Zulassung lehnt sie die Unternehmen Repositories zugreifen (beispielsweise in welchem interne Software, die sie für die Autorisierung verwenden, möglicherweise so etwas wie gitolite). Möglicherweise gibt es eine Möglichkeit, Ihren persönlichen Schlüssel zum Unternehmenskonto hinzuzufügen (mehrere Personen verwenden nicht denselben corp_rsa
öffentliche und private Schlüsseldateien, oder?).
Die IdentitiesOnly
.ssh/config
Konfiguration Schlüsselwort kann verwendet werden, um die Schlüssel zu begrenzen, die ssh bietet die Fern sshd nur diejenigen über IdentityFile
Schlüsselwörter angegeben (dh wird es ablehnen, alle zusätzlichen Schlüssel zu verwenden, was passieren in einen aktiven ssh-agent) geladen werden.
Probieren Sie diese .ssh/config
Abschnitte aus:
Host {personalaccount}.unfuddle.com
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Host {companyaccount}.unfuddle.com
IdentityFile ~/.ssh/{companyaccount}_rsa
IdentitiesOnly yes
Verwenden Sie dann Git-URLs wie diese:
[email protected]{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
[email protected]{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git
Wenn Sie den .ssh/config
-Mechanismus voll ausnutzen möchten, können Sie Ihren eigenen benutzerdefinierten Hostnamen angeben und den Standardbenutzernamen ändern:
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
Verwenden Sie dann Git-URLs wie diese:
uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git
man ssh_config
So etwas wie
Host personal_repo
User personal
IdentityFile .ssh/personal_rsa
Host company_repo
User company
IdentityFile .ssh/company_rsa
Und benutze personal_repo
als Host in deinem Git Repo.
IdentityFile und IdentitiesOnly funktionieren gut. Was mich stört, ist, dass ich daran denken muss, unterschiedliche Hostnamen für die Verbindung zu verwenden, und dass die weitergeleitete Agent-Verbindung weiterhin alle Schlüssel enthält. Wenn also der Remote-Host kompromittiert ist, können sie jede meiner Identitäten verwenden, während ich in bin .
Ich habe vor kurzem angefangen mit:
https://github.com/ccontavalli/ssh-ident
es ist eine Hülle um ssh, es:
Wenn Sie den ssh-Agenten verwenden möchten, gehen Sie wie folgt vor:
# 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-agent -L | grep personal > ~/.ssh/personal_identity.pub
ssh-agent -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
Erläuterung: Wenn Sie einen privaten Schlüssel in Ihrem ~/.ssh-Verzeichnis haben, wird ssh-agent nicht verwendet. Also erstellen wir einen öffentlichen Schlüssel unter einem anderen Namen, so dass ssh gezwungen ist, ssh-agent zu verwenden. Dies ist auch hilfreich, wenn Sie keinen Zugriff auf private Schlüssel haben (z. B. Weiterleitung des SSH-Agenten).