it-swarm.com.de

Verwenden mehrerer öffentlicher SSH-Schlüssel

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.

97
Dave Long

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
109
Chris Johnsen

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.

3
Reactormonk

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:

  • für jede von Ihnen definierte Identität wird ein völlig separater Agent geführt.
  • teilt Agenten automatisch über Anmeldesitzungen hinweg, was in Ihrer .bashrc-Datei nichts zu tun hat.
  • lädt den Agenten und die entsprechenden Schlüssel bei Bedarf, wenn Sie sie zum ersten Mal benötigen.
  • ermittelt anhand der SSH-Befehlszeile (Hostname & so) oder Ihres aktuellen Arbeitsverzeichnisses, welcher Agent verwendet werden soll. Dies ist besonders praktisch, da ich je nach Tätigkeit auf unterschiedlichen Wegen arbeite.
3
MarkMo

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).

0
Vanuan