only 2 PW

This commit is contained in:
marcinator_2 committed 2026-10-14 18:20:48 +02:00
1 parent b0f35bf3cc
commit 044ad2afbe
8 files changed
+175 -5

No files matched your search

+8
View File
@@ -44,3 +44,11 @@ Schritte; Reihenfolge im zugehörigen Vorschau-README dokumentieren.
- Neu erzeugte Backupordner, Unit-Sicherung, current-Link und service-host
dem ursprünglichen Pi-Benutzer zuordnen; bestehende Datenbesitzer beim Kopieren
bewahren. Abgelehnte sudo-Anmeldung darf keine Umschaltung/Dienstpause auslösen.
- Upload baut einen SSH-ControlMaster pro angewendetem Aufruf auf; Ordneranlage,
rsync und Aktivierung teilen den Socket. Privater temporärer Ordner unter /tmp
(0700), ControlPersist=no und EXIT-/Signal-Aufräumen. Hostschlüsselprüfung bleibt
aktiv, keine Passwörter/Schlüssel/SSH-Konfiguration neu speichern.
- Slave-Verbindungen verwenden BatchMode=yes, damit bei Verlust der gemeinsamen
Verbindung keine weiteren Passwortdialoge entstehen. Ohne Schlüssel sind SSH
und sudo weiterhin zwei getrennte Anmeldungen. Vorschau erzeugt keinen Socket.
+34 -3
View File
@@ -88,19 +88,47 @@ excludes=(
--exclude='*.p12'
--exclude='*.pfx'
)
ssh_cmd=(ssh -o StrictHostKeyChecking=ask "$target" "mkdir -p -- '$remote_dir/releases' && mkdir -- '$remote_dir/releases/$release'")
# One SSH authentication for the entire upload. The socket is private and only
# lives for this invocation; no persistent key or password is written.
control_dir=
control_path=/tmp/halloween-ssh-VORSCHAU/control
master_started=false
cleanup_connection() {
if $master_started; then
ssh -o BatchMode=yes -S "$control_path" -O exit "$target" >/dev/null 2>&1 || true
fi
if [[ -n $control_dir ]]; then
rm -f -- "$control_path"
rmdir -- "$control_dir" 2>/dev/null || true
fi
}
if $apply; then
control_dir=$(mktemp -d /tmp/halloween-ssh-XXXXXXXX)
chmod 700 "$control_dir"
control_path="$control_dir/control"
trap cleanup_connection EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
fi
master_cmd=(ssh -M -N -f -o ControlPersist=no -o BatchMode=no
-o StrictHostKeyChecking=ask -o "ControlPath=$control_path" "$target")
# If the shared connection is lost, refuse password fallback on later steps.
ssh_options=(-o StrictHostKeyChecking=ask -o ControlMaster=no
-o "ControlPath=$control_path" -o BatchMode=yes)
ssh_cmd=(ssh "${ssh_options[@]}" "$target" "mkdir -p -- '$remote_dir/releases' && mkdir -- '$remote_dir/releases/$release'")
rsync_cmd=(
rsync -a --delay-updates --human-readable --info=stats2
"${excludes[@]}"
-e 'ssh -o StrictHostKeyChecking=ask'
-e "ssh -o StrictHostKeyChecking=ask -o ControlMaster=no -o ControlPath=$control_path -o BatchMode=yes"
-- "$source_dir/" "$target:$remote_dir/releases/$release/"
)
service_cmd=(ssh -tt -o StrictHostKeyChecking=ask "$target" "bash '$remote_dir/releases/$release/tools/activate_pi_release.sh' '$remote_dir' '$release' '$bind_host'")
service_cmd=(ssh -tt "${ssh_options[@]}" "$target" "bash '$remote_dir/releases/$release/tools/activate_pi_release.sh' '$remote_dir' '$release' '$bind_host'")
printf 'Quelle: %s\nZiel: %s:%s/\n' "$source_dir" "$target" "$remote_dir"
printf 'Ausgelassen: .git, .venv, data, preview, references, __pycache__, .env, Schlüsseldateien\n'
if ! $apply; then
printf '\nVorschau, noch keine Verbindung und keine Übertragung:\n'
printf ' %q' "${master_cmd[@]}"; printf '\n'
printf ' %q' "${ssh_cmd[@]}"; printf '\n'
printf ' %q' "${rsync_cmd[@]}"; printf '\n'
printf ' %q' "${service_cmd[@]}"; printf '\n'
@@ -108,6 +136,9 @@ if ! $apply; then
exit 0
fi
printf 'SSH-Verbindung einmal anmelden; danach folgt nur noch die sudo-Abfrage auf dem Pi.\n'
"${master_cmd[@]}"
master_started=true
"${ssh_cmd[@]}"
"${rsync_cmd[@]}"
printf 'Übertragung abgeschlossen.\n'