Ich habe einige Probleme damit, dass zwei verschiedene SSH-Schlüssel / GitHub-Konten gut zusammenspielen. Ich habe folgendes Setup:
Repos von einem Konto aus mit zugänglich [email protected]:accountname
Repos, auf die von einem anderen Konto aus zugegriffen werden kann [email protected]:anotheraccount
Jedes Konto hat einen eigenen SSH-Schlüssel. Beide SSH-Schlüssel wurden hinzugefügt und ich habe eine Konfigurationsdatei erstellt. Ich glaube jedoch nicht, dass die Konfigurationsdatei korrekt ist. Ich bin nicht ganz sicher, wie ich angeben soll, dass Repos, auf die mit zugegriffen wird, verwendet werden [email protected]:accountname
sollen id_rsa
und [email protected]:anotheraccount
sollen id_rsa_anotheraccount
.
git pull
immer wieder fehl und fragte nach dem Schulpasscode, trotz separater Identitätsdateien "IdentitiesOnly = yes", separater Domänen und Hostnamen, die alle inssh-add -l
... vorhanden waren. Der Uni-Schlüssel war unabhängig von dieser Einrichtung "zuerst". Musste seinen Abschnitt unter die anderen in .ssh / config verschieben, und jetzt ist esgit pull
von beiden GitHub-Konten erfolgreich, ohne nach einem uni ssh-Passwort zu fragen.Antworten:
Andy Lesters Antwort ist korrekt, aber ich habe einen wichtigen zusätzlichen Schritt gefunden, den ich machen musste, damit dies funktioniert. Bei dem Versuch, zwei Profile einzurichten, eines für den persönlichen und eines für die Arbeit, war mein
~/.ssh/config
ungefähr wie folgt:Mein Arbeitsprofil wurde erst erstellt, als ich ein
ssh-add ~/.ssh/work_rsa
. Danach verwendeten Verbindungen zu Github das richtige Profil. Zuvor wurde standardmäßig der erste öffentliche Schlüssel verwendet.Wenn bei Verwendung keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden konnte
ssh-add
,überprüfen Sie Folgendes : https://stackoverflow.com/a/17695338/1760313
quelle
ssh-add
mir gefehlt.IdentitiesOnly yes
demHost *
Abschnitt Ihrer~/.ssh/config
Datei hinzu , um das Problem zu beheben, dass "standardmäßig der erste öffentliche Schlüssel verwendet wurde" . Dies weist ssh an, die von Ihnen angegebenen IdentityFiles tatsächlich zu verwenden, anstatt den Server mit allen zu spammen.Ich musste dies kürzlich tun und all diese Antworten und ihre Kommentare durchsehen, um die Informationen schließlich zusammenzufügen. Deshalb werde ich alles hier in einem Beitrag zusammenfassen, damit Sie es sich bequem machen können:
Schritt 1: SSH-Tasten
Erstellen Sie alle benötigten Schlüsselpaare . In diesem Beispiel habe ich mich default / original 'id_rsa' (was der Standard ist) und meine neue 'id_rsa-work' genannt:
Schritt 2: ssh config Richten Sie
mehrere ssh-Profile ein, indem Sie ~ / .ssh / config erstellen / ändern . Beachten Sie die leicht abweichenden 'Host'-Werte:
Schritt 3: ssh-add
Möglicherweise müssen Sie dies tun oder nicht. Listen Sie zur Überprüfung Identitätsfingerabdrücke auf, indem Sie Folgendes ausführen:
Wenn Ihre Einträge nicht vorhanden sind, führen Sie Folgendes aus:
Schritt 4: Test
Um zu testen, ob Sie alles richtig gemacht haben, empfehle ich die folgende schnelle Überprüfung:
Beachten Sie, dass Sie den Hostnamen (github / work.github) ändern müssen, je nachdem, welchen Schlüssel / welche Identität Sie verwenden möchten. Aber jetzt solltest du gut gehen! :) :)
quelle
Angenommen, es
alice
handelt sich um einen Benutzer von github.com mit zwei oder mehr privaten RepositorysrepoN
. In diesem Beispiel arbeiten wir mit nur zwei Repositorys mit dem Namenrepo1
undrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
Sie müssen aus diesen Repositorys ziehen, ohne Kennwörter einzugeben, wahrscheinlich auf einem Server oder auf mehreren Servern. Sie möchten zum
git pull origin master
Beispiel eine Leistung erbringen, und Sie möchten, dass dies geschieht, ohne nach einem Kennwort zu fragen.Sie beschäftigen sich nicht gerne mit ssh-agent. Sie haben
~/.ssh/config
eine Datei entdeckt (oder entdecken sie gerade) , in der Ihr ssh-Client weiß, welchen privaten Schlüssel er je nach Hostname und Benutzername verwenden soll. Der einfache Konfigurationseintrag sieht so aus Dies:Sie haben also Ihr
(alice_github.id_rsa, alice_github.id_rsa.pub)
Schlüsselpaar erstellt, sind dann auch zur.git/config
Datei Ihres Repositorys gegangen und haben die URL Ihrer Fernbedienung so geändertorigin
:Und schließlich sind Sie zum Repository-
Settings > Deploy keys
Bereich gegangen und haben den Inhalt von hinzugefügtalice_github.id_rsa.pub
An diesem Punkt können Sie dies
git pull origin master
ohne Eingabe eines Passworts ohne Probleme tun .aber was ist mit dem zweiten Repository?
Ihr Instinkt wird also sein, diesen Schlüssel zu greifen und ihn zu
repo2
den Bereitstellungsschlüsseln hinzuzufügen , aber github.com wird einen Fehler machen und Ihnen mitteilen, dass der Schlüssel bereits verwendet wird.Jetzt generieren Sie einen weiteren Schlüssel (
ssh-keygen -t rsa -C "[email protected]"
natürlich ohne Passwörter), und damit dies nicht zu einem Chaos wird, benennen Sie Ihre Schlüssel jetzt wie folgt:repo1
Schlüsselpaar:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2
Schlüsselpaar:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
Sie werden jetzt den neuen öffentlichen Schlüssel in
repo2
die Konfiguration "Schlüssel bereitstellen" auf github.com einfügen, aber jetzt haben Sie ein SSH-Problem, mit dem Sie sich befassen müssen.Wie kann ssh feststellen, welcher Schlüssel verwendet werden soll, wenn die Repositorys in derselben
github.com
Domäne gehostet werden ?Ihre
.ssh/config
Datei zeigt aufgithub.com
und weiß nicht, welchen Schlüssel Sie verwenden sollen, wenn der Pull ausgeführt werden soll.Also habe ich mit github.com einen Trick gefunden. Sie können Ihrem SSH-Client mitteilen, dass sich jedes Repository in einer anderen github.com-Subdomain befindet. In diesen Fällen handelt es sich um
repo1.github.com
undrepo2.github.com
Als erstes bearbeiten Sie die
.git/config
Dateien auf Ihren Repo-Klonen, sodass sie stattdessen so aussehen:Für repo1
Für repo2
Und dann können Sie in Ihrer
.ssh/config
Datei eine Konfiguration für jede Subdomain eingeben :)Jetzt können Sie
git pull origin master
keine Kennwörter mehr aus beiden Repositorys eingeben.Wenn Sie mehrere Maschinen haben, können Sie die Schlüssel auf jede der Maschinen kopieren und wiederverwenden. Ich würde jedoch empfehlen, die Beinarbeit zu erledigen, um 1 Schlüssel pro Maschine und Repo zu generieren. Sie werden viel mehr Schlüssel zu handhaben haben, aber Sie werden weniger anfällig sein, wenn einer kompromittiert wird.
quelle
.ssh/config
ist der entscheidende Schritt - vielen Dank dafürIch habe 2 Accounts auf Github, und hier ist, was ich getan habe
linux
, damit es funktioniert.Schlüssel
ssh-keygen
, benennen Sie sie richtig, damit das Leben einfacher wird.ssh-add path_to_private_key
Aufbau
~ / .ssh / config
Remote-URL für Repo festlegen:
Für Repo im Host
github-kc
:Für Repo im Host
github-abc
:Erklärung
Optionen in
~/.ssh/config
:Host
github- <identify_specific_user>Host kann ein beliebiger Wert sein, der einen Host und ein Konto identifizieren kann. Es muss kein echter Host sein, z. B.
github-kc
eines meiner Konten auf github für meinen lokalen Laptop.Wenn Sie die Remote-URL für ein Git-Repo festlegen, ist dies der Wert, nach
git@
dem ein Repo einem Host zugeordnet werden muss, zgit remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git
Host
]Hostname
github.com
Geben Sie den tatsächlichen Hostnamen an. Verwenden Sie ihn einfach für github.User
gitder benutzer ist immer
git
für github,IdentityFile
Geben Sie den zu verwendenden Schlüssel an. Geben Sie einfach den Pfad als öffentlichen Schlüssel ein.
LogLevel
Geben Sie die zu debuggende Protokollstufe an, falls ein Problem vorliegt, und
DEBUG3
geben Sie die detailliertesten Informationen an.quelle
ssh-add path_to_private_key
- wahrscheinlich, weil der Agent in diesem Fall nicht benötigt wird. Die Konfigurationsdatei definiert explizit den Pfad zu den Schlüsseln.ssh-add
weil Ihre Schlüssel nicht passwortgeschützt sind oder (wenn Sie einen Mac verwenden) der OSX-Schlüsselbund dies für Sie erledigt.ssh-add
verhindert, dass Sie bei jedem Zugriff auf Ihre Schlüssel die Passphrase eingeben müssen.Verwenden Sie den
IdentityFile
Parameter in Ihrem~/.ssh/config
:quelle
Eine möglicherweise einfachere Alternative zum Bearbeiten der SSH-Konfigurationsdatei (wie in allen anderen Antworten vorgeschlagen) besteht darin, ein einzelnes Repository für die Verwendung eines anderen (z. B. nicht standardmäßigen) SSH-Schlüssels zu konfigurieren.
Führen Sie in dem Repository, für das Sie einen anderen Schlüssel verwenden möchten, Folgendes aus:
Und stellen Sie sicher, dass Ihr Schlüssel dem SSH-Agenten hinzugefügt wird, indem Sie Folgendes ausführen:
Beachten Sie, dass der obige Befehl nur dem ssh-agent für Ihre aktuelle Sitzung einen Schlüssel hinzufügt. Wenn dies für immer funktionieren soll, müssen Sie es Ihrem SSH-Agenten "dauerhaft" hinzufügen. Hier erfahren Sie beispielsweise, wie dies für Ubuntu und hier für OSX gemacht wird .
Es sollte auch möglich sein, diesen Ansatz mithilfe der globalen Git-Konfiguration und der bedingten Includes auf mehrere Repositorys zu skalieren ( siehe Beispiel ).
quelle
Ich habe viel Zeit damit verbracht, alle Schritte zu verstehen. Beschreiben wir also Schritt für Schritt:
ssh-keygen -t rsa
. Geben Sie ihm eine Alternative wieproj1.id_rsa
und schlagen Sie ohne Zweifel, weil Sie keine Passphrase benötigen.Neuen Abschnitt hinzufügen in
.ssh/config
:Berücksichtigen Sie den ersten Abschnitt und beachten Sie, dass
proj1.github.com
wir später auf den Abschnitt zurückkommen werden.ssh-add ~/.ssh/proj1.id_rsa
proj1.github.com
(genau dem Host aus der Konfigurationsdatei).git clone [email protected]
.Ein gutes Tutorial.
Leg dich nicht mit den Gastgebern an
quelle
id_rsa_proj1
undproj1_id_rsa
sollten eigentlich gleich sein. Sie können.git/config
Ihrer Antwort auch den Teil über Einstellungen aus dem Lernprogramm hinzufügen .proj1.id_rsa
vs.proj1_id_rsa
In meinem Fall hat keine der oben genannten Lösungen mein Problem gelöst, aber ssh-agent. Grundsätzlich habe ich folgendes gemacht:
Generieren Sie ein Schlüsselpaar mit ssh-keygen (siehe unten). Es wird ein Schlüsselpaar generiert (in diesem Beispiel
.\keyfile
und.\keyfile.pub
)ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile
Laden Sie
keyfile.pub
zum git - Providerps -ef | grep ssh-agent
, ob es bereits ausgeführt wird).ssh-add .\keyfile
, um Anmeldeinformationen hinzuzufügengit clone git@provider:username/project.git
quelle
Ich benutzte,
Es war gut.
Verwenden Sie die obige Einstellung in Ihrer .ssh / config-Datei für verschiedene rsa-Schlüssel für verschiedene Benutzernamen.
quelle
Als Ergänzung zu @stefanos Antwort ist es besser, den Befehl zu verwenden,
-f
wenn ein neuer SSH-Schlüssel für ein anderes Konto generiert wird.Da die
id_rsa_work
Datei nicht im Pfad vorhanden~/.ssh/
ist und ich diese Datei manuell erstelle und sie nicht funktioniert :(quelle
Ich habe die Technik, mit der ich damit umgehe, hier veröffentlicht
quelle