Verwenden mehrerer öffentlicher SSH-Schlüssel

Ich habe ein persönliches Konto und ein Firmenkonto bei Unfuddle. Auf Unfuddle können SSH-Schlüssel nur für ein einzelnes Konto verwendet werden, daher muss ich für beide Konten einen separaten SSH-Schlüssel auf meinem Laptop erstellen. Ich habe ssh-keygen -t rsa ausgeführt, um zwei Schlüssel mit unterschiedlichen Namen zu generieren (personal ist Standardname und company ist {company}_rsa). Das Problem ist jetzt, dass mein Standardschlüssel anscheinend überall verwendet wird und ich nicht herausfinden kann, wie ein Schlüssel für einzelne Repos in Git angegeben werden soll.

Also mein frage ist: Wie gebe ich einen SSH-Schlüssel an, der auf Repo-to-Repo-Basis verwendet werden soll?

Ich habe meine ssh_config (~/.ssh / config) 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 auf meinem Company Unfuddle-Konto sieht folgendermaßen aus:

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

Ich bin mir also nicht sicher, ob mit meiner SSH-Konfiguration oder meiner Git-Konfiguration etwas nicht stimmt.

Author: Dave Long, 2011-04-18

4 answers

Wenn Sie einen aktiven ssh-Agent haben, der Ihren id_rsa Schlüssel geladen hat, dann ist das Problem wahrscheinlich, dass ssh diesen Schlüssel zuerst anbietet. Unfuddle akzeptiert es wahrscheinlich zur Authentifizierung (z. B. in sshd), lehnt es jedoch zur Autorisierung für den Zugriff auf die Unternehmens-Repositorys ab (z. B. in welcher internen Software auch immer sie für die Autorisierung verwenden, möglicherweise ähnlich wie Gitolite). Vielleicht gibt es eine Möglichkeit, Ihren persönlichen Schlüssel zum Unternehmenskonto hinzuzufügen (mehrere Personen sind nicht die gleichen corp_rsa öffentlichen und privaten Schlüsseldateien teilen, sind sie?).


Der IdentitiesOnly .ssh/config das Konfigurationsschlüsselwort kann verwendet werden, um die Schlüssel, die ssh dem entfernten sshd anbietet, auf die über die Schlüsselwörter IdentityFile angegebenen Schlüssel zu beschränken (dh es weigert sich, zusätzliche Schlüssel zu verwenden, die zufällig in einen aktiven ssh-Agent geladen werden).

Versuchen Sie diese .ssh/config Abschnitte:

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:

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

Wenn Sie wenn Sie den Mechanismus .ssh/config 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
 110
Author: Chris Johnsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-04-19 03:36:58

IdentityFile und Identityonly funktionieren gut. Was mich stört, ist, dass ich daran denken muss, verschiedene Hostnamen zu verwenden, um eine Verbindung herzustellen, und die Tatsache, dass die weitergeleitete Agentenverbindung immer noch alle Schlüssel enthält, was bedeutet, dass der Remote-Host, wenn er kompromittiert ist, eine meiner Identitäten verwenden kann, während ich bin in.

Ich habe kürzlich angefangen zu verwenden:

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

Es ist ein wrapper um ssh, es:

  • behält einen völlig separaten Agenten für jede Identität, die Sie definieren.
  • automatisch Aktien Agenten über Login-Sitzungen, nichts in Ihrem zu tun .bashrc.
  • lädt den Agenten und die entsprechenden Schlüssel bei Bedarf, wenn Sie sie zum ersten Mal benötigen.
  • legt fest, welcher Agent entweder basierend auf der ssh-Befehlszeile (Hostname & so) oder Ihrem aktuellen Arbeitsverzeichnis verwendet werden soll. Dies ist besonders praktisch, da ich je nach dem, was ich tue, von verschiedenen Pfaden aus arbeite.
 4
Author: MarkMo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-03-15 06:56:03

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 verwende personal_repo als Host in deinem Git Repo.

 3
Author: Reactormonk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-04-18 14:05:03

Hier ist ein richtiger Weg, wenn Sie ssh agent verwenden möchten:

# 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

Erklärung: wenn Sie einen privaten Schlüssel in Ihrem ~/.ssh-Verzeichnis, ssh-Agent wird nicht verwendet. Wir erstellen also einen öffentlichen Schlüssel unter einem anderen Namen, sodass ssh gezwungen ist, ssh-agent zu verwenden. Dies hilft auch, wenn Sie keinen Zugriff auf private Schlüssel haben (z. B. ssh Agent Forwarding)

 2
Author: Vanuan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-08-15 00:45:36