Angenommen, es alice
handelt sich um einen Benutzer von github.com mit zwei oder mehr privaten Repositorys repoN
. In diesem Beispiel arbeiten wir mit nur zwei Repositorys mit dem Namen repo1
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:
Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
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ändert origin
:
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
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 "alice@alice.com"
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 auf github.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
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
Für repo2
[remote "origin"]
url = "ssh://git@repo2.github.com/alice/repo2.git"
Und dann können Sie in Ihrer .ssh/config
Datei eine Konfiguration für jede Subdomain eingeben :)
Host repo1.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
IdentitiesOnly yes
Host repo2.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
IdentitiesOnly yes
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.