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 bin gelaufen ssh-keygen -t rsa
, 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 auf meinem Firmen-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 etwas mit meiner ssh-Konfiguration oder meiner git-Konfiguration nicht stimmt.
Antworten:
Wenn Sie einen aktiven SSH-Agenten haben , auf dem Ihr
id_rsa
Schlüssel geladen ist, ist es wahrscheinlich, dass SSH diesen Schlüssel zuerst anbietet. Unfuddle akzeptiert es wahrscheinlich für die Authentifizierung (z. B. in sshd ), lehnt es jedoch für die Autorisierung des Zugriffs auf die Unternehmens-Repositorys ab (z. B. in der internen Software, die für die Autorisierung verwendet wird, möglicherweise ähnlich wie Gitolite). Vielleicht gibt es eine Möglichkeit, Ihren persönlichen Schlüssel zum Unternehmenskonto hinzuzufügen (mehrere Personen teilen nicht die gleichencorp_rsa
öffentlichen und privaten Schlüsseldateien, oder?).Das
IdentitiesOnly
.ssh/config
Konfigurationsschlüsselwort kann verwendet werden, um die Schlüssel, die ssh dem entfernten sshd anbietet, auf die Schlüssel zu beschränken , die überIdentityFile
Schlüsselwörter angegeben wurden (dh es werden keine zusätzlichen Schlüssel verwendet, die zufällig in einen aktiven ssh-Agenten geladen werden ).Probieren Sie diese
.ssh/config
Abschnitte aus:Verwenden Sie dann Git-URLs wie diese:
Wenn Sie den
.ssh/config
Mechanismus voll ausnutzen möchten , können Sie Ihren eigenen benutzerdefinierten Hostnamen angeben und den Standardbenutzernamen ändern:Verwenden Sie dann Git-URLs wie diese:
quelle
ssh-add -l
bevor Sie Ihren Git-Host-Alias verwenden. Außerdem muss die Datei mit dem öffentlichen Schlüssel vorhanden sein, damit ssh den von ssh-agent gespeicherten Schlüssel erkennen kann . Sie können eine verlorene.pub
Datei mit einem Befehl wie neu generierenssh-keygen -f blah -y > blah.pub
.man ssh_config
So etwas wie
Und
personal_repo
als Host in Ihrem Git-Repo verwenden.quelle
Host
ist nur ein Bezeichner - kein vollständiger Domainname erforderlich. Das schafft wahrscheinlich einige versteckte Fehler. Wenn du das änderst, musst du nicht den vollständigen Namen in deiner Git-Konfiguration buchstabieren.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:
quelle
Wenn Sie den ssh-Agenten verwenden möchten, gehen Sie wie folgt vor:
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 hilft auch, wenn Sie keinen Zugriff auf private Schlüssel haben (z. B. SSH-Agentenweiterleitung).
quelle
ssh-add -L
, nichtssh-agent
.