Remote git pull durch SSH Tunnel
Verfasst: Donnerstag 28. März 2019, 09:49
Wenn man seine Git Repos lokal hostet, z.B. mit Gogs, aber von einem online Server aus die Möglichkeit haben möchte einen git pull zu machen, kann dieses Script nützlich sein:
Vor dem Pull muss natürlich ein Klone gemacht sein, für das obige Beispiel ist das git Verzeichnis nicht im Working Tree.
Schritte hierzu:
Vom System, auf dem das git Repo verwaltet wird, aus ein SSH Tunnel aufbauen:
(SSH Key sollte hinterlegt werden und gegebenenfalls in die ssh config eingetragen sein)
In einem zweiten Terminal noch eine SSH Verbindung zum Server aufbauen und dort das Repo klonen:
Hat das geklappt, das obige Script als post-receive Script als git-Hook auf dem lokalen git Server ablegen.
Wenn jetzt lokal git Pushs auf den Master gemacht werden, werden sie automatisch Online abgeglichen.
Code: Alles auswählen
#!/usr/bin/env python3
import os
import signal
import sys
import subprocess
from time import sleep
# Read STDIN (Format: "from_commit to_commit branch_name")
(old, new, branch) = sys.stdin.read().split()
# Only deploy if master branch was pushed
if branch == 'refs/heads/master':
tunnel = subprocess.Popen(
'ssh -R 8888:localhost:22 example.org', stdout=subprocess.PIPE,
shell=True, preexec_fn=os.setsid)
while not tunnel.pid:
sleep(1)
subprocess.call([
"ssh", "example.org", "git",
"--git-dir=/home/user/git/project.git",
"--work-tree=/var/www/project/",
"pull", "origin", "+refs/heads/master:refs/heads/master"])
os.killpg(os.getpgid(tunnel.pid), signal.SIGTERM)
Schritte hierzu:
Vom System, auf dem das git Repo verwaltet wird, aus ein SSH Tunnel aufbauen:
Code: Alles auswählen
ssh -R 8888:localhost:22 example.org
In einem zweiten Terminal noch eine SSH Verbindung zum Server aufbauen und dort das Repo klonen:
Code: Alles auswählen
git clone ssh://user@localhost:8888/user/project.git -git-dir=/home/user/git/project.git --work-tree=/var/www/project/
Wenn jetzt lokal git Pushs auf den Master gemacht werden, werden sie automatisch Online abgeglichen.