Private
Public Access
only 2 PW
This commit is contained in:
1 parent
b0f35bf3cc
commit
044ad2afbe
8 files changed
+175
-5
No files matched your search
+34
-3
@@ -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'
|
||||
|
||||
Reference in new issue
Block a user