From 1cea1df9e78e53d4a173697fa1c9e945141723ef Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 10 Aug 2026 17:04:38 +0200 Subject: [PATCH] init-phone: Benutzername aus der Klon-Adresse entfernen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Repo ist anonym lesbar; Zugangsdaten braucht nur der Push, und der findet auf dem PC statt. Stand der Benutzername trotzdem in der URL, fragte git auf dem Telefon nach einem Passwort — auf einer Bildschirmtastatur eine unnötige Quälerei für einen Zugriff, der gar keine Anmeldung erfordert. provision.sh entfernt ihn beim Einsetzen der Adresse, init-phone.sh zusätzlich beim Ausführen — so ist auch eine von Hand übergebene Adresse abgedeckt. Die Ersetzung greift nur bei http(s); SSH-Adressen bleiben unberührt, dort ist git@ zwingend. Damit entfällt auch das Angebot, Zugangsdaten auf dem Telefon zu speichern. Der credential.helper wird dort stattdessen ausdrücklich geleert: das Telefon liest nur und soll nie versehentlich zurückschreiben wollen. Co-Authored-By: Claude Opus 5 (1M context) --- provision/init-phone.sh | 36 +++++++++++++++--------------------- provision/provision.sh | 9 +++++++++ 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/provision/init-phone.sh b/provision/init-phone.sh index 4c3bdea..84d080b 100755 --- a/provision/init-phone.sh +++ b/provision/init-phone.sh @@ -35,8 +35,16 @@ case "$REPO" in exit 1 ;; esac +# Benutzernamen aus der Adresse entfernen. Lesen geht anonym; steht ein Name in +# der URL, fragt git trotzdem nach einem Passwort — auf einer Bildschirmtastatur +# eine unnötige Quälerei. Zum Schreiben braucht man ihn ohnehin nur auf dem PC. +REPO_ROH="$REPO" +REPO=$(printf '%s' "$REPO" | sed -E 's#^(https?://)[^/@]+@#\1#') +[ "$REPO" != "$REPO_ROH" ] && ANONYM=1 || ANONYM=0 + kopf "HPOS — Ersteinrichtung auf dem Telefon" hinweis "Repo: $REPO" +[ "$ANONYM" = 1 ] && hinweis "(Benutzername entfernt — gelesen wird anonym)" # ── git ────────────────────────────────────────────────────────────────────── kopf "git" @@ -48,26 +56,9 @@ else else fehl "Installation von git fehlgeschlagen"; exit 1; fi fi -# ── Zugangsdaten ───────────────────────────────────────────────────────────── -# Bei einem privaten Repo fragt git bei jedem Zugriff nach dem Passwort. Auf einer -# Bildschirmtastatur ist das eine Zumutung, deshalb wird der Speicher angeboten. -# Er legt die Zugangsdaten im Klartext unter ~/.git-credentials ab — das gehört -# gesagt, damit die Entscheidung bewusst fällt. -case "$REPO" in - https://*@*) - if [ ! -f "$HOME/.git-credentials" ]; then - kopf "Zugangsdaten" - hinweis "Das Repo verlangt vermutlich ein Passwort." - printf ' Nach der Eingabe dauerhaft merken? (Klartext in ~/.git-credentials) [j/N] > ' - read -r MERKEN - case "${MERKEN:-n}" in - j|J) git config --global credential.helper store - ok "Passwort wird nach der ersten Eingabe gespeichert" ;; - *) hinweis "Dann fragt git bei jedem Zugriff erneut." ;; - esac - fi - ;; -esac +# Das Telefon liest nur. Es soll nie versehentlich versuchen zurückzuschreiben — +# ein Push von hier wäre weder gewollt noch möglich. +git config --global credential.helper "" 2>/dev/null || true # ── Holen oder aktualisieren ───────────────────────────────────────────────── kopf "Repo" @@ -81,12 +72,15 @@ if [ -d "$ZIEL/.git" ]; then exit 1 fi else + # --depth reicht nicht: für 'git pull' später brauchen wir eine vollwertige + # Arbeitskopie, kein abgeschnittenes Archiv. if git clone "$REPO" "$ZIEL"; then ok "geklont nach $ZIEL" else fehl "git clone fehlgeschlagen." - hinweis "Bei privaten Repos: Benutzername und Passwort prüfen." hinweis "Adresse war: $REPO" + hinweis "Ist das Repo öffentlich lesbar? Ohne das braucht es Zugangsdaten," + hinweis "und die gehören nicht aufs Telefon." exit 1 fi fi diff --git a/provision/provision.sh b/provision/provision.sh index 808513f..87f6fe1 100755 --- a/provision/provision.sh +++ b/provision/provision.sh @@ -282,6 +282,15 @@ if [ -z "$REPO_URL" ]; then read -r REPO_URL