Tutorial: Webseite mittels Github Actions zu uberspace übertragen (rsync)

Diese Anleitung zeigt, wie man eine simple HTML-Webseite aus einem Github Repository direkt auf einen (ökologischen und solidarischen) Webspace bei Uberspace übertragen kann. Mit jedem Push in das Repository wird die Webseite dann automatisch auf den eigenen Webspace übertragen und aktualisiert.

  • Diese Methode ist gegenüber der Nutzung von Github Pages vorteilhaft da Nutzer/innen die Webseite ohne den Besuch des USA-Github-Servers nutzen können (Stichwort „zerschlagenes Privacy Shield“).
  • Das Tutorial ist für das Betriebssystem Mac OSX erstellt, falls es jemand für Windows anpassen möchte, sehr gerne (Beitrag steht unter CC0 Public Domain – ich verlinke hier gerne dann das Tutorial.)
  • Warnung: Diese Github Action überschreibt und löscht Dateien auf dem Uberspace, die nicht im Github Repository vorkommen – bitte mit Vorsicht benutzen oder in einem Unterordner testen. 🙂

Inhaltsverzeichnis

1. SSH Schlüssel-Paar (SSH Keys) auf dem eigenen Rechner erzeugen

Es ist egal, wo man die SSH Keys erzeugt, dies muss nicht auf dem Uberspace geschehen.

In diesem Beispiel erzeugen wir das Key-Paar lokal. Mit „-f“ gibt man an, wie der Dateiname für das Schlüsselpaar heißen soll.

Im Mac-Terminal einen neuen Ordner erstellen, bspw. im Ordner Dokumente (kann später gelöscht werden):

cd ~/Documents
mkdir neuer-ordner-fuer-sshkeys
cd neuer-ordner-fuer-sshkeys

In diesem Ordner kann nun ein Schlüsselpaar erzeugt werden:

ssh-keygen -f neuerKeyFuerGithub -t ed25519 -a 100

Wenn die Eingabe für ein Passwort erscheint, einfach leer lassen und Enter drücken (das Passwort für einen SSH Key ist optional, mehr Informationen z.B. hier).

Mit „ls -l“ kann man sich anzeigen lassen, was generiert wurde im Ordner:

ls -l
-rw-------  1 user  staff  419  7 Feb 11:43 neuerKeyFuerGithub
-rw-r--r--  1 user  staff  111  7 Feb 11:43 neuerKeyFuerGithub.pub 

2. Github Actions Skript erstellen

Um Github Actions zu nutzen, muss die Datei „main.yml“ in .github/workflows erzeugt werden im Repository. Wir nutzen hierfür burnett01/rsync-deployments, hier ein simples Beispiel:

# /.github/workflows/main.yml
# Warning: deletes all files on uberspace which are not in repo, use without --delete if unsure
on:
  push:
    # master for old repos, main is the new standard
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: rsync deployments
      uses: burnett01/rsync-deployments@6.0.0
      with:
        switches: -avzr --delete
        path: /
        remote_path: /home/${{ secrets.UBERSPACE_USER }}/html/
        remote_host: ${{ secrets.UBERSPACE_HOST }}
        remote_user: ${{ secrets.UBERSPACE_USER }}
        remote_key: ${{ secrets.DEPLOY_KEY_PRIVATE }}

Der Pfad ist der lokale Pfad im Repository, der remote_path kann auch auf einen Unterordner bei Uberspace eingestellt werden.

Die Optionen (switches) für rsync kann man sich u.a. mit diesem Online-Tool anschauen.

3. User, Host, privaten Schlüssel in den Github Repository Secrets eintragen

Nun müssen wir den Wert für secrects.DEPLOY_KEY_PRIVATE im Repository abspeichern auf github.com. Hierfür müssen wir den lokal erzeugten privaten Schlüssel kopieren:

Mit „cat“ kann man einen Dateiinhalt anzeigen lassen, der private Schlüssel ist ohne die Endung .pub:

cat neuerKeyFuerGithub

Den angezeigten Text komplett nun in die Github Repository Settings einfügen, der Name ist „DEPLOY_KEY_PRIVATE“:

Danach muss noch der Wert für „UBERSPACE_USER“ und „UBERSPACE_HOST“ hinterlegt werden, diese findet man im Uberspace Dashboard heraus (Host ohne „.“ am Ende eintragen):

Die zwei Werte genau wie zuvor den DEPLOY_KEY_PRIVATE eintragen:

4. Öffentlichen Schlüssel bei uberspace hinterlegen

Nun müssen wir uns mit SSH noch auf dem Uberspace verbinden, um dort den öffentlichen Schlüssel (Key) mit .pub am Ende zu hinterlegen (Wenn dir das SSH-Terminal nicht liegt, kannst du dich auch mit Filezilla oder Cyberduck verbinden).

Der Schlüssel kann ebenso wieder mit „cat“ angezeigt und kopiert werden:

cat neuerKeyFuerGithub.pub

Mit dem Uberspace verbinden, die Daten haben wir oben bereits im Dashboard herausgefunden:

ssh UBERSPACEUSER@UBERSPACEHOST

Evtl. musst du noch ein SSH-Passwort setzen, falls du dies noch nicht gemacht hast (Bei Uberspace hat man ein Passwort für das Web-Dashboard und ein separates Passwort für den SSH-Zugang):

Nach dem Verbinden wechseln wir in das .ssh-Verzeichnis des Uberspace-Users:

cd ~/.ssh/
ls -l

Du solltest folgende Ausgabe sehen (falls nicht muss SSH evtl. noch am Server eingerichtet werden, mehr Informationen in den Uberspace-Docs):

[XXXXXXXsg@carpo .ssh]$ ls -l
total 4
-rw-------. 1 XXUBERSPACEUSERXX XXUBERSPACEUSERXX 542 Feb  7 11:47 authorized_keys

Die Datei mit dem Editor nano öffnen:

nano authorized_keys

Eine neue Zeile anlegen und den Wert von „cat neuerKeyFuerGithub.pub“ einfügen. Mit „#“ können Kommentare angelegt werden, um später zu wissen, welcher Key das ist:

Mit „STRG + O“ speichern und den Vorgang mit Enter bestätigen. Mit „STRG + X“ den Editor verlassen.

Hinweis bzgl. Sicherheit: Auf Twitter wurde ich darauf aufmerksam gemacht, dass man den SSH-Zugriff auf den Befehl rsync sowie ein bestimmtes Verzeichnis einschränken kann. Der Hinweis findet sich hier. Vielen Dank an den Hinweisgeber!

5. Testen

Im Repository eine Änderung commiten und pushen, im Github Actions Tab nachschauen ob alles erfolgreich war:

6. Wichtig: Keys löschen / sicher abspeichern

Jede*r der auf die private Schlüssel-Datei Zugriff hat, kann sich auch mit dem Uberspace Webspace verbinden. Also am besten von der Festplatte löschen und in einem Passwort-Manager oder einem passwortgeschützen Ordner ablegen.


Lizenz des Artikels: CC0, Beitragsbild: https://www.rawpixel.com/image/440042/irregular-galaxy / Public Domain / rawpixel, Original by NASA

Anregungen, Feedback, kritische Hinweise gerne in die Kommentare oder einen Tweet als WebMention verlinken. Besten Dank!

4 Kommentare

Simon Prell 19. Juli 2021 Antworten

Ich habe deine Anleitung so weit umgesetzt scheitere aber an den rsync deployments es schlägt mit den fehler „Error loading key „(stdin)“: invalid format ssh: Could not resolve hostname : Name does not resolve
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.3]“
ich kann mit den key mich im uberspace anmelden. DEPLOY_KEY_PRIVATE habe ich mit den Kommentar und den mit putty genierten private key gefüllt (RSA).
Wäre cool wenn Sie mir helfen können.

Matthias Andrasch 21. Juli 2021 Antworten

Hi Simon,
ich bin da leider etwas überfragt.

Hier (https://github.com/JamesIves/github-pages-deploy-action/discussions/614) hatte jemand ein ähnliches Problem, weil die Keys vertauscht waren? Ansonsten ggf. key-generierung wie in meiner Anleitung beschrieben mit ssh-keygen Befehl auf dem uberspace machen?

Ansonsten sagt die zweite Fehlermeldung „ssh: Could not resolve hostname : Name does not resolve“ dass ja zusätzlich auch ${{ secrets.UBERSPACE_HOST }} nicht ganz zu passen scheint?

Viel Erfolg auf jeden Fall!

Fritz theCat 29. September 2023 Antworten

Falls wer nach 2020 herkommt: master zu main umbenennen im yml file. hat mich mal wieder 1h gekostet 😁

Matthias Andrasch 30. September 2023 Antworten

Hi, oh je! 😁 Hab es aktualisiert. Danke für die Meldung! VG

Schreibe einen Kommentar