So verwalten Sie mehrere GitHub-Konten auf einem einzigen Computer mit SSH-Schlüsseln

Die Notwendigkeit, mehrere GitHub-Konten auf demselben Computer zu verwalten, tritt für die meisten Entwickler zu einem bestimmten Zeitpunkt auf. Jedes Mal, wenn ich meinen Mac wechsle oder Git Push mit einem neuen Arbeitskonto durchführen muss, surfe ich am Ende nach den Anleitungen von etwas, das ich über ein halbes Dutzend Mal getan habe.

Meine Faulheit, den Prozess nicht zu dokumentieren, und meine Unfähigkeit, mich an die Schritte zu erinnern, haben mich dazu gebracht, eine anständige Menge Zeit damit zu verbringen, die Teile aus dem gesamten Web zu holen und sie dann irgendwie zum Laufen zu bringen.

Ich bin sicher, es gibt viele von Ihnen, die dort waren, das getan haben, und viele weitere von Ihnen, die nur auf das nächste Mal warten, wenn dasselbe passiert (ich selbst eingeschlossen!). Dieses Bestreben soll uns allen helfen.

1. Generieren der SSH-Schlüssel

Vor dem Generieren eines SSH-Schlüssels können wir überprüfen, ob SSH-Schlüssel vorhanden sind: ls -al ~/.sshHier werden alle vorhandenen öffentlichen und privaten Schlüsselpaare aufgelistet, sofern vorhanden.

Wenn ~/.ssh/id_rsaverfügbar, können wir es wiederverwenden oder zuerst einen Standardschlüssel generieren, ~/.ssh/id_rsaindem wir Folgendes ausführen:

ssh-keygen -t rsa

Wenn Sie nach dem Speicherort für die Schlüssel gefragt werden, akzeptieren Sie den Standardspeicherort, indem Sie die Eingabetaste drücken. Ein privater Schlüssel und ein öffentlicher Schlüssel ~/.ssh/id_rsa.pubwerden am Standardspeicherort von ssh erstellt ~/.ssh/.

Verwenden wir dieses Standardschlüsselpaar für unser persönliches Konto.

Für die Arbeitskonten erstellen wir verschiedene SSH-Schlüssel. Der folgende Code generiert die SSH-Schlüssel und speichert den öffentlichen Schlüssel mit dem Tag "[email protected]_mail.com" unter~/.ssh/id_rsa_work_user1.pub

$ ssh-keygen -t rsa -C "[email protected]_mail.com" -f "id_rsa_work_user1" 

Wir haben zwei verschiedene Schlüssel erstellt:

~/.ssh/id_rsa ~/.ssh/id_rsa_work_user1

2. Hinzufügen des neuen SSH-Schlüssels zum entsprechenden GitHub-Konto

Wir haben bereits die öffentlichen SSH-Schlüssel bereit und werden unsere GitHub-Konten bitten, den von uns erstellten Schlüsseln zu vertrauen. Dies dient dazu, die Notwendigkeit zu vermeiden, bei jedem Git-Push den Benutzernamen und das Passwort einzugeben.

Kopieren Sie den pbcopy < ~/.ssh/id_rsa.Pub mit öffentlichem Schlüssel und melden Sie sich dann bei Ihrem persönlichen GitHub-Konto an:

  1. Gehe zu Settings
  2. Wählen Sie SSH and GPG keysaus dem Menü links.
  3. Klicken Sie auf New SSH key, geben Sie einen geeigneten Titel ein und fügen Sie den Schlüssel in das Feld unten ein
  4. Klicken Add key- und fertig!
Verwenden Sie für die Arbeitskonten die entsprechenden öffentlichen Schlüssel ( pbcopy < ~/.ssh/id_rsa_work_user1.Pub) und wiederholen Sie die obigen Schritte in Ihren GitHub-Arbeitskonten.

3 . Registrieren der neuen SSH-Schlüssel beim ssh-agent

Um die Schlüssel verwenden zu können, müssen wir sie beim ssh-agent auf unserem Computer registrieren . Stellen Sie sicher, dass ssh-agent mit dem Befehl ausgeführt wird eval "$(ssh-agent -s)".

Fügen Sie dem ssh-agent die Schlüssel folgendermaßen hinzu:

ssh-add ~/.ssh/id_rsa ssh-add ~/.ssh/id_rsa_work_user1

Lassen Sie den SSH-Agenten die entsprechenden SSH-Schlüssel für die verschiedenen SSH-Hosts verwenden.

Dies ist der entscheidende Teil, und wir haben zwei verschiedene Ansätze:

Verwenden der SSH-Konfigurationsdatei (Schritt 4) und jeweils nur einen aktiven SSH-Schlüssel im SSH-Agenten (Schritt 5).

4. Erstellen der SSH-Konfigurationsdatei

Hier fügen wir tatsächlich die SSH-Konfigurationsregeln für verschiedene Hosts hinzu und geben an, welche Identitätsdatei für welche Domäne verwendet werden soll.

Die SSH-Konfigurationsdatei ist unter ~ / .ssh / config verfügbar .Bearbeiten Sie es, wenn es existiert, oder wir können es einfach erstellen.

$ cd ~/.ssh/ $ touch config // Creates the file if not exists $ code config // Opens the file in VS code, use any editor

Nehmen Sie Konfigurationseinträge für die entsprechenden GitHub-Konten vor, die denen in Ihrer ~/.ssh/configDatei ähneln :

# Personal account, - the default config Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa # Work account-1 Host github.com-work_user1 HostName github.com User git IdentityFile ~/.ssh/id_rsa_work_user1

" Work_user1 " ist die GitHub-Benutzer-ID für das Arbeitskonto.

" G ithub.com- work_user1 " ist eine Notation, die zur Unterscheidung der mehreren Git-Konten verwendet wird. Sie können auch die Notation " work_user1.g ithub.com" verwenden. Stellen Sie sicher, dass Sie mit der von Ihnen verwendeten Hostnamen-Notation übereinstimmen. Dies ist relevant, wenn Sie ein Repository klonen oder wenn Sie den Remote-Ursprung für ein lokales Repository festlegen

Die obige Konfiguration fordert ssh-agent auf:

  • Verwenden Sie id_rsa als SchlüsselzumJede Git-URL, die @ github.com verwendet
  • Verwenden Sie den Schlüssel id_rsa_work_user1 für jede Git-URL, die @ github.com-work_user1 verwendet

5. Jeweils ein aktiver SSH-Schlüssel im SSH-Agenten

Dieser Ansatz erfordert keine SSH-Konfigurationsregeln. Vielmehr stellen wir manuell sicher, dass dem ssh-agent zum Zeitpunkt einer Git-Operation nur der entsprechende Schlüssel zugeordnet ist.

ssh-add -llistet alle an den ssh-agent angehängten SSH-Schlüssel auf. Entfernen Sie alle und fügen Sie den einen Schlüssel hinzu, den Sie verwenden möchten.

Wenn es sich um ein persönliches Git-Konto handelt, das Sie pushen möchten:

$ ssh-add -D //removes all ssh entries from the ssh-agent $ ssh-add ~/.ssh/id_rsa // Adds the relevant ssh key

Der ssh-Agent hat jetzt den Schlüssel dem persönlichen GitHub-Konto zugeordnet, und wir können einen Git-Push in das persönliche Repository ausführen.

Um auf Ihr GitHub-Arbeitskonto 1 zuzugreifen, ändern Sie den mit dem ssh-agent zugeordneten SSH-Schlüssel, indem Sie den vorhandenen Schlüssel entfernen und den mit dem GitHub-Arbeitskonto zugeordneten SSH-Schlüssel hinzufügen.

$ ssh-add -D $ ssh-add ~/.ssh/id_rsa_work_user1

Der ssh-Agent hat derzeit den Schlüssel dem Arbeits-Github-Konto zugeordnet, und Sie können einen Git-Push zum Arbeits-Repository ausführen. Dies erfordert jedoch ein wenig manuellen Aufwand.

Festlegen der Git-Remote-URL für die lokalen Repositorys

Sobald wir lokale Git-Repositorys geklont / erstellt haben, stellen Sie sicher, dass der Benutzername und die E-Mail-Adresse der Git-Konfiguration genau Ihren Wünschen entsprechen. GitHub identifiziert den Autor eines Commits anhand der E-Mail-ID, die der Commit-Beschreibung beigefügt ist.

Um die Konfigurationsnamen und E - Mail in dem lokalen Git - Verzeichnis Liste, tun git config user.nameund git config user.email. Wenn es nicht gefunden wird, aktualisieren Sie es entsprechend.

git config user.name "User 1" // Updates git config user name git config user.email "[email protected]"

6. Beim Klonen von Repositorys

Hinweis: Schritt 7 hilft, wenn das Repository bereits lokal verfügbar ist.

Nachdem die Konfigurationen vorhanden sind, können wir die entsprechenden Repositorys klonen. Beachten Sie beim Klonen, dass wir die Hostnamen verwenden, die wir in der SSH-Konfiguration verwendet haben.

Repositorys können mit dem von Git bereitgestellten Klonbefehl geklont werden:

git clone [email protected]:personal_account_name/repo_name.git

Für das Arbeitsrepository muss mit diesem Befehl eine Änderung vorgenommen werden:

git clone [email protected]_user1:work_user1/repo_name.git

Diese Änderung wird abhängig vom in der SSH-Konfiguration definierten Hostnamen vorgenommen. Die Zeichenfolge zwischen @ und: sollte mit der Zeichenfolge in der SSH-Konfigurationsdatei übereinstimmen.

7. Für lokal vorhandene Repositorys

Wenn das Repository bereits geklont ist:

Listen Sie die Git-Fernbedienung des Repositorys auf. git remote -v

Überprüfen Sie, ob die URL mit unserem zu verwendenden GitHub-Host übereinstimmt, oder aktualisieren Sie die URL des Remote-Ursprungs.

git remote set-url origin [email protected]_user1:worker_user1/repo_name.git

Stellen Sie sicher, dass die Zeichenfolge zwischen @ und: mit dem Host übereinstimmt, den wir in der SSH-Konfiguration angegeben haben.

Wenn Sie ein neues Repository auf lokaler Ebene erstellen:

Initialize Git in the project folder git init.

Create the new repository in the GitHub account and then add it as the Git remote to the local repository.

git remote add origin [email protected]_user1:work_user1/repo_name.git 

Ensure the string between @ and : matches the Host we have given in the SSH config.

Push the initial commit to the GitHub repository:

git add . git commit -m "Initial commit" git push -u origin master

We are done!

Adding or updating the Git remote of the local Git directory with the proper host will take care of selecting the correct SSH key to verify our identity with GitHub. With all the above in place, our git operations should work seamlessly.