Greifen Sie auf Github zu, indem Sie den SSH-Schlüssel in GitPython angeben

Ich musste innerhalb des Programms auf das Repository auf Github zugreifen, also habe ich GitPython verwendet. Das meiste davon wurde durch einen Blick auf Tutorial gelöst, aber es wurde beschrieben, weil es einen Teil gab, dessen Ausführung durch Angabe des SSH-Schlüssels einige Zeit in Anspruch nahm. Machen.

Geben Sie den SSH-Schlüssel in Git an

In dem Fall, in dem wir an dieser Zeit gearbeitet haben, bestehen die folgenden Annahmen und Anforderungen.

In diesem Fall hängt es von der Umgebung ab, sodass dies nicht unbedingt gesagt werden kann. In vielen Fällen ist der Zugriff auf das Repository von Konto A jedoch problemlos möglich. Konto A ist an den Standard-SSH-Schlüssel (~ / .ssh / id_rsa) gebunden, und Git verwendet diesen Schlüssel standardmäßig.

Wenn Sie dagegen Konto B verwenden, müssen Sie Git anweisen, "~ / .ssh / id_rsa_new" zu verwenden. Eine Möglichkeit, dies zu tun, besteht darin, ~ / .ssh / config auf Folgendes zu setzen:

~/.ssh/config


host github-new
  user git
  hostname github.com
  identityfile ~/.ssh/id_rsa_new
  identitiesonly yes

Sie können dann den von host anstelle von github.com (angegeben durch hostname) angegebenen Wert verwenden, um mit ~ / .ssh / id_rsa_new darauf zuzugreifen.

~/.ssh/id_rsa_Mit new klonen


$ git clone git@github-new:<AccountB>/<repository>.git

Dies ist in Ordnung, wenn Sie es nur in Ihrer eigenen Umgebung ausführen, dieses Programm jedoch in einer anderen Umgebung als Ihrer eigenen ausgeführt werden muss. Daher ist es besser, es als Laufzeitoption angeben zu können, als es festzulegen.

Git hat Umgebungsvariablen GIT_SSH und GIT_SSH_COMMAND ( GIT_SSH_COMMAND ist 2.3 oder höher). Diese können den von Git verwendeten SSH-Befehl angeben. Sie können das Problem lösen, indem Sie im auszuführenden SSH-Befehl dieselben Optionen wie in der obigen Konfigurationsdatei angeben.

GIT_SSH,GIT_SSH_COMMAND


# GIT_SSH
$ GIT_SSH='~/ssh_cmd' git push origin master
$ cat ~/ssh_cmd
ssh -i ~/.ssh/id_rsa_new -oIdentitiesOnly=yes "$@"

# GIT_SSH_COMMAND
$ GIT_SSH_COMMAND='ssh -i ~/.ssh/id_rsa_new -oIdentitiesOnly=yes' git push origin master

(Referenz) http://git-scm.com/docs/git#_other

Geben Sie den SSH-Schlüssel in GitPython an

GitPython definiert einen Kontextmanager, der "GIT_SSH", "GIT_SSH_COMMAND" unterstützt.

(Referenz) http://gitpython.readthedocs.org/en/stable/tutorial.html#handling-remotes

Ich konnte nicht davon ausgehen, dass die Git-Version der Ausführungsumgebung 2.3 oder höher ist, also habe ich diesmal GIT_SSH verwendet. Da ich den Inhalt des SSH-Schlüssels bereits in den Einstellungen hatte, schrieb ich den Schlüssel und den Befehl in eine Datei und gab ihn an.

GIT mit Git Python_SSH,GIT_SSH_COMMAND


import git

#SSH-Schlüssel exportieren
with open('./id_rsa_tmp', 'w') as f:
    f.write('<SSH Key>')
    os.chmod('./id_rsa_tmp', 0o600)
#SSH-Befehl exportieren
with open('./ssh_cmd', 'w') as f:
    f.write('ssh -i ../id_rsa_tmp -oIdentitiesOnly=yes "$@"')
    os.chmod('./ssh_cmd', 0o777)

#Repository-Klon
repo = git.Repo.clone_from('accountB_repo')

#Repository Push
ssh_executable = '../ssh_cmd'
with repo.git.custom_environment(GIT_SSH=ssh_executable):
    repo.remote().push('master')

Bitte beachten Sie, dass Sie sich beim Ausführen von "repo.gitcustom_environment" im Arbeitsverzeichnis des Repositorys befinden. Im obigen Code befinden sich das geklonte Repository (accountB_repo), der Schlüssel ( id_rsa_tmp) und der Befehl (ssh_cmd) im selben Verzeichnis. Wenn repo.gitcustom_environment ausgeführt wird, befindet es sich im Verzeichnis accountB_repo. Geben Sie daher den Schlüssel und den Befehl bewusst an, dass sie sich im übergeordneten Verzeichnis befinden.

Schlüssel- und Befehlsspezifikation


with open('./ssh_cmd', 'w') as f:
    #Der Schlüssel befindet sich im übergeordneten Verzeichnis
    f.write('ssh -i ../id_rsa_tmp -oIdentitiesOnly=yes "$@"')

#Der Befehl befindet sich im übergeordneten Verzeichnis
ssh_executable = '../ssh_cmd'
with repo.git.custom_environment(GIT_SSH=ssh_executable):
...

Recommended Posts

Greifen Sie auf Github zu, indem Sie den SSH-Schlüssel in GitPython angeben
Extrahieren Sie den Statuscodefehler der Serie 400.500 des Apache-Zugriffsprotokolls, indem Sie den Zeitbereich angeben
Greifen Sie mit Python auf die Twitter-API zu
Sortieren Sie nach Angabe der Bedingungen in CASTable
Sortieren durch Angabe einer Spalte im Python Numpy-Array.
Installieren Sie, indem Sie die Version mit pip angeben
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei Zeile für Zeile mit Python
Lesen Sie die Datei, indem Sie den Zeichencode angeben.
Technologie zur Verwaltung von Passwörtern in der GitHub-Ära
Importieren Sie, indem Sie den Verzeichnispfad direkt angeben
Melden Sie sich mit SSH bei einem Remote-Server an
Greifen Sie auf Dateien im selben Verzeichnis wie die ausführbare Datei zu
Sortieren Sie die Elemente eines Arrays, indem Sie Bedingungen angeben
BeautifulSoup-Trick: Entscheiden Sie das Tag, indem Sie den Pfad angeben
Machen Sie einen beliebigen Schlüssel zum Primärschlüssel im Django-Modell
Suchen Sie nach dem Wert der Instanz in der Liste
Greifen Sie über REPL auf die im Skript definierten Variablen zu