Angenommen, es alicehandelt 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 repo1undrepo2
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 masterBeispiel 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/configeine 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/configDatei 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 keysBereich gegangen und haben den Inhalt von hinzugefügtalice_github.id_rsa.pub
An diesem Punkt können Sie dies git pull origin masterohne 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 repo2den 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 repo2die 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.comDomäne gehostet werden ?
Ihre .ssh/configDatei zeigt auf github.comund 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.comundrepo2.github.com
Als erstes bearbeiten Sie die .git/configDateien 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/configDatei 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 masterkeine 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.