In Form kommen
Um ein Git-Repo unter einem separaten Github / Bitbucket / was auch immer-Konto zu verwalten, müssen Sie lediglich einen neuen SSH-Schlüssel generieren.
Aber bevor wir beginnen / Schieben repos mit dem zweiten Identität ziehen, wir müssen Sie in Form bringen - nehmen wir an , Ihr System - Setup mit einem typischen id_rsa
und id_rsa.pub
Schlüsselpaar. Im Moment siehst du so tree ~/.ssh
aus
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
Benennen Sie zunächst dieses Schlüsselpaar. Wenn Sie einen beschreibenden Namen hinzufügen , können Sie sich merken, welcher Schlüssel für welchen Benutzer / welche Fernbedienung verwendet wird
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
Als nächstes generieren wir ein neues Schlüsselpaar - hier werde ich den neuen Schlüssel benennengithub-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
Wenn wir jetzt schauen, sehen tree ~/.ssh
wir
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
Als nächstes müssen wir eine ~/.ssh/config
Datei einrichten , die unsere Schlüsselkonfigurationen definiert. Wir erstellen es mit den richtigen Lese- / Schreibberechtigungen für Eigentümer
$ (umask 077; touch ~/.ssh/config)
Öffnen Sie das mit Ihrem bevorzugten Editor und fügen Sie den folgenden Inhalt hinzu
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Vermutlich sind einige Repos mit Ihrer primären Github-Identität verknüpft. Aus diesem Grund ist der "Standard" github.com Host
so eingerichtet, dass er Ihren mainuser
Schlüssel verwendet. Wenn Sie nicht ein Konto einem anderen vorziehen möchten, zeige ich Ihnen, wie Sie vorhandene Repos auf Ihrem System aktualisieren, um eine aktualisierte SSH-Konfiguration zu verwenden.
Fügen Sie Ihren neuen SSH-Schlüssel zu github hinzu
Gehen Sie zu github.com/settings/keys , um Ihren neuen öffentlichen Schlüssel hinzuzufügen
Sie können den Inhalt des öffentlichen Schlüssels abrufen, indem Sie ihn in github kopieren / einfügen
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
Jetzt ist Ihre neue Benutzeridentität vollständig eingerichtet. Im Folgenden zeigen wir Ihnen, wie Sie sie verwenden.
Dinge erledigen: ein Repo klonen
Wie kommt das zusammen, um mit Git und Github zu arbeiten? Da Sie kein Huhn ohne Ei haben können, werden wir uns mit dem Klonen eines vorhandenen Repos befassen. Diese Situation kann auf Sie zutreffen, wenn Sie ein neues Github-Konto für Ihren Arbeitsplatz haben und einem Unternehmensprojekt hinzugefügt wurden.
Nehmen wir an, es github.com/someorg/somerepo
existiert bereits und Sie wurden hinzugefügt - das Klonen ist so einfach wie
$ git clone github.com-otheruser:someorg/somerepo.git
Dieser fettgedruckte Teil muss mit dem Host
Namen übereinstimmen, den wir in Ihrer ~/.ssh/config
Datei eingerichtet haben. Das verbindet git richtig mit dem entsprechenden IdentityFile
und authentifiziert dich richtig mit github
Dinge erledigen: ein neues Repo erstellen
Nun, da Sie kein Huhn ohne Ei haben können, werden wir versuchen, ein neues Repo auf Ihrem sekundären Konto zu veröffentlichen. Diese Situation gilt für Benutzer, die mit ihrem sekundären Github-Konto neue Inhalte erstellen.
Nehmen wir an, Sie haben bereits ein wenig vor Ort gearbeitet und sind jetzt bereit, auf Github umzusteigen. Sie können mir folgen, wenn Sie möchten
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
Konfigurieren Sie nun dieses Repo so, dass es Ihre Identität verwendet
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
Machen Sie jetzt Ihr erstes Commit
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
Überprüfen Sie das Commit, um festzustellen, ob Ihre neue Identität mithilfe des Git-Protokolls verwendet wurde
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
Okay, Zeit zum Github zu drängen! Da github noch nichts über unser neues Repo weiß, gehen Sie zuerst zu github.com/new und erstellen Sie Ihr neues Repo - nennen Sie es somerepo
Um Ihr Repo so zu konfigurieren, dass es mit der richtigen Identität / den richtigen Anmeldeinformationen mit Github "spricht", haben wir eine Fernbedienung hinzugefügt. Angenommen, Ihr Github-Benutzername für Ihr neues Konto lautet someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
Dieser fettgedruckte Teil ist absolut kritisch und muss mit dem übereinstimmen, den Host
wir in Ihrer ~/.ssh/config
Datei definiert haben
Zuletzt das Repo drücken
$ git push origin master
Aktualisieren Sie ein vorhandenes Repo, um eine neue SSH-Konfiguration zu verwenden
Angenommen, Sie haben bereits ein Repo geklont, möchten aber jetzt eine neue SSH-Konfiguration verwenden. Im obigen Beispiel haben wir Ihre vorhandenen Repos auf dem neuesten Stand gehalten, indem wir Ihr vorheriges id_rsa
/ id_rsa.pub
Schlüsselpaar Host github.com
in Ihrer SSH-Konfigurationsdatei zugewiesen haben. Daran ist nichts auszusetzen, aber ich habe jetzt mindestens 5 Github-Konfigurationen und ich mag es nicht, eine davon als "Standard" -Konfiguration zu betrachten - ich würde lieber jede explizit beschreiben.
Bevor wir das hatten
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Also werden wir das jetzt aktualisieren (Änderungen in Fettdruck )
Host github.com-mainuser
HostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Dies bedeutet jedoch, dass jetzt jedes vorhandene Repo mit einer github.com
Fernbedienung nicht mehr mit dieser Identitätsdatei funktioniert. Aber keine Sorge, es ist eine einfache Lösung.
Um ein vorhandenes Repo zu aktualisieren und Ihre neue SSH-Konfiguration zu verwenden, öffnen Sie einfach die Git-Konfigurationsdatei des Repos und aktualisieren Sie die URL!
$ cd existingrepo
$ nano .git/config
Aktualisieren Sie das Feld für den Remote-Ursprung (Änderungen in Fettdruck ).
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
Das ist es. Jetzt können Sie push
/ pull
nach Herzenslust
Berechtigungen für SSH-Schlüsseldateien
Wenn Sie Probleme mit Ihren öffentlichen Schlüsseln haben, die nicht richtig funktionieren, sind die Dateiberechtigungen, die für Ihr ~/.ssh
Verzeichnis und die entsprechenden Schlüsseldateien zulässig sind , bei SSH recht streng
Als Faustregel gilt, dass alle Verzeichnisse 700
und alle Dateien vorhanden sein sollten 600
- dies bedeutet, dass sie nur vom Eigentümer gelesen / geschrieben werden können -, dass keine andere Gruppe / kein anderer Benutzer sie lesen / schreiben kann
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
Wie verwalte ich meine SSH-Schlüssel?
Ich verwalte separate SSH-Schlüssel für jeden Host, mit dem ich eine Verbindung herstelle. Wenn also ein Schlüssel jemals kompromittiert wird, muss ich die Schlüssel nicht an jedem anderen Ort aktualisieren, an dem ich diesen Schlüssel verwendet habe. Dies ist wie wenn Sie die Benachrichtigung von Adobe erhalten, dass 150 Millionen der Benutzerinformationen gestohlen wurden - jetzt müssen Sie diese Kreditkarte stornieren und jeden Dienst aktualisieren, der davon abhängt - was für ein Ärgernis.
So ~/.ssh
sieht mein Verzeichnis aus: Ich habe einen .pem
Schlüssel für jeden Benutzer in einem Ordner für jede Domäne, zu der ich eine Verbindung herstelle. Ich benutze .pem
Schlüssel, damit ich nur eine Datei pro Schlüssel brauche .
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
Und hier ist meine entsprechende /.ssh/config
Datei - natürlich ist das Github-Zeug für die Beantwortung dieser Frage zu Github relevant, aber diese Antwort soll Sie mit dem Wissen ausstatten, Ihre SSH-Identitäten auf einer beliebigen Anzahl von Diensten / Maschinen zu verwalten.
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
Abrufen Ihres öffentlichen SSH-Schlüssels von einem PEM-Schlüssel
Oben haben Sie bemerkt, dass ich nur eine Datei für jeden Schlüssel habe. Wenn ich einen öffentlichen Schlüssel bereitstellen muss, generiere ich ihn einfach nach Bedarf.
Wenn github nach Ihrem öffentlichen ssh-Schlüssel fragt, führen Sie diesen Befehl aus, um den öffentlichen Schlüssel an stdout auszugeben - bei Bedarf kopieren / einfügen
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
Beachten Sie, dass dies auch der gleiche Vorgang ist, den ich zum Hinzufügen meines Schlüssels zu einem Remotecomputer verwende. Der ssh-rsa AAAA...
Wert wird in die ~/.ssh/authorized_keys
Datei der Fernbedienung kopiert
Konvertieren Ihrer id_rsa
/ id_rsa.pub
Schlüsselpaare in das PEM-Format
Sie möchten also Ihre Schlüsseldateien zähmen und die Dateisystem-Cruft reduzieren? Das Konvertieren Ihres Schlüsselpaars in eine einzelne PEM ist einfach
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
Oder wir haben, zusammen mit unseren obigen Beispielen, umbenannt id_rsa -> github-mainuser
und id_rsa.pub -> github-mainuser.pub
- so
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
Um sicherzustellen, dass wir dies korrekt konvertiert haben, sollten Sie überprüfen, ob der generierte öffentliche Schlüssel mit Ihrem alten öffentlichen Schlüssel übereinstimmt
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
Nachdem Sie Ihre github-mainuser.pem
Datei erstellt haben, können Sie Ihre alten Dateien github-mainuser
und github-mainuser.pub
Dateien sicher löschen. Es ist nur die PEM-Datei erforderlich. Generieren Sie einfach den öffentlichen Schlüssel, wann immer Sie ihn benötigen ^ _ ^
PEM-Schlüssel von Grund auf neu erstellen
Sie müssen das private / öffentliche Schlüsselpaar nicht erstellen und dann in einen einzelnen PEM-Schlüssel konvertieren. Sie können den PEM-Schlüssel direkt erstellen.
Lassen Sie uns eine erstellen newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
Das Abrufen des öffentlichen SSH-Schlüssels ist dasselbe
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> um den ssh-agent anzuweisen, ihn zur Verwendung einzuschließen. <hr /> Rest funktioniert für mich mit dem oben genannten Tutorial einwandfrei.