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