Private Github Repos mit PAT auf Systemen synchronisieren
Einleitung
Was ist ein Personal Access Token (PAT)?
Ein Personal Access Token (PAT) ist ein spezieller Zugangsschlüssel, den du in GitHub erzeugst. Er ersetzt das Passwort für Git-Vorgänge über HTTPS. Mit einem PAT kannst du private Repositories klonen, pullen und pushen. Dabei hast du mit einen Accesstoken die Möglichkeit, die entsprechenden Berechtigungen sehr spezifisch zu definieren.
Hauptteil
PAT erstellen
Erstelle den Token in GitHub unter Settings → Developer settings → Personal access tokens → Fine-grained tokens.
Als Token name kann man alles eingeben, was der persönlichen Identifizierung dienlich ist. Das selbe gilt für die Description.
Beim "Repository access
" muss geprüft werden, was auf den spezifischen Fall zutrifft. Viele meiner Repositories sind privat gestellt - daher nutze ich immer die "Only select repositories
" Option und vergebe für ein Repo immer auch einen eigenen PAT. Damit habe ich die Flexibilität, wenn man etwas passieren sollte und ich einen Token verliere, dass ich diesen ersetzen kann, ohne das ich andere Dienste beeinflusse.
Zuletzt wird unter "Permissions
" ausgewählt, was der token alles ermöglichen kann. In meinem Fall möchte ich nur das die Repo Inhalte heruntergeladen werden können. Daher wähle ich: (Die Option ist nur Verfügbar, wenn diese auch Sinn ergibt! - Wenn Repository access auf "Public repositories
" steht, wird diese Option (sinnhafterweise) nicht angezeigt...Add Permissions -> Contents
Zuletzt auf "generate token
" klicken
Repository klonen
git clone https://github.com/<BENUTZERNAME>/<REPOSITORY>.git
Gib als **Username** deinen GitHub-Namen ein, als **Passwort** den PAT.
Credential Helper einrichten
cd /var/www/<<dein Ordner>>
sudo -u www-data git config credential.helper "store --file=/var/www/.git-credentials/<REPO>.git-credentials"
Beim nächsten `git pull` wirst du nach Username und Token gefragt. Git speichert diese in der angegebenen Datei.
Aufbau der .git-credentials-Datei
https://<USERNAME>:<TOKEN>@github.com
Beispiel (mit Dummy-Daten):
https://demoUser:ghp_1234BeispielToken@github.com
Rechte und Sicherheit
sudo chown www-data:www-data /var/www/.git-credentials/<REPO>.git-credentials
sudo chmod 700 /var/www/.git-credentials/<REPO>.git-credentials
So stellst du sicher, dass niemand außer `www-data` den Token auslesen kann. Wichtig ist, dass der User auch ausführende Rechte hat, da sonst das abrufen nicht funktioniert -> Entsprechend 700 verwenden, nicht 600 oder ähnliches!
Repo aktualisieren
sudo -u www-data git pull
Die gespeicherten Zugangsdaten werden automatisch genutzt.
Häufige Fehler
Schwerwiegend: nicht in einem Git-Repository → Credential Helper wurde ohne cd
ins Repo gesetzt.
Lösung: zuerst ins Repo wechseln.
Konnte Sperre für Zugangsdatenspeicher nicht bekommen → Rechteproblem. Lösung: Ordner anlegen, chown
und chmod
korrekt setzen. (www-data und 700 -> im Fall eines Webserver)
Global vs. Repo-spezifisch
Mit einem PAT und dem Credential Helper kannst du private GitHub-Repositories auf deinem Server klonen und synchronisieren. Es ist möglich sowohl global als auch repo-spezifisch zu arbeiten.
Es gibt daher grundsätzlich auch die möglichkeit den Commandsudo -u www-data git config credential.helper "store --file=/var/www/.git-credentials/<REPO>.git-credentials"
Mit einem --global
zu erweitern. Damit wird die Config dann im Homeverzeichnis des Users angelegt und es können alle Userrepos mit den entsprechenden Token(s) verwendet werden.
Zuletzt gibt es auch eine --system
option. Damit ist es dann Systemweit...
Back…