BASIC_AUTH_PROXY hinzugefügt

This commit is contained in:
Patrick Asmus
2026-05-11 15:31:18 +02:00
parent d3417b0431
commit aef30bd1dd
3 changed files with 66 additions and 1 deletions

View File

@@ -10,6 +10,7 @@ Dieses Bash-Script erstellt hostbasierte Datei-Backups (pxar) zu einem Proxmox B
- Locking via `flock`, saubere Exit-Codes, robustes Fehlerhandling, `--dry-run`
- Healthcheck-OK-Datei für externes Monitoring (z. B. PRTG)
- TLS-Fingerprint nur bei selbstsigniertem PBS-Zertifikat notwendig (optional)
- Optionale BasicAuth fuer HTTP-Proxy-Zugriff zum PBS
## Konfiguration
Alle Einstellungen liegen **ausschließlich** in der Konfigurationsdatei. Standard: `pbs-backup.v2.conf` im selben Verzeichnis wie das Script; alternativ den Pfad per Umgebungsvariable im Script setzen:
@@ -26,6 +27,11 @@ Alle Einstellungen liegen **ausschließlich** in der Konfigurationsdatei. Standa
Hinweis: Wenn der PBS aus dem Internet über einen anderen Port als den `8007` erreichbar ist, **muss** der Port angegeben werden.
- `PBS_FINGERPRINT` (optional): Nur erforderlich bei selbstsigniertem Zertifikat; sonst **leer lassen**.
- `PBS_API` (Pflicht für Auth): API-Key für die Authentifizierung. Das Script setzt ihn intern nur im Subshell als `PBS_PASSWORD`, damit er nicht ins globale Environment oder in Logs gelangt.
- `PBS_BASIC_AUTH_ENABLED` (optional): Aktiviert BasicAuth ueber `ALL_PROXY` fuer den PBS-Client.
- `PBS_BASIC_AUTH_PROXY_URL` (optional): Komplette HTTP-Proxy-URL, z. B. `http://user:pass@proxy.example.com:1080`.
- Alternativ zur kompletten URL: `PBS_BASIC_AUTH_PROXY_HOST`, `PBS_BASIC_AUTH_PROXY_PORT`, `PBS_BASIC_AUTH_USER`, `PBS_BASIC_AUTH_PASSWORD`.
Hinweis zu BasicAuth: `proxmox-backup-client` unterstuetzt offiziell `ALL_PROXY` fuer HTTP-Proxies, auch mit `user:password@host`. Eine vorgeschaltete Reverse-Proxy-BasicAuth, die den normalen HTTP-Header `Authorization` belegt, kann mit PBS-API-Token kollidieren, weil PBS diesen Header selbst fuer die Token-Authentifizierung nutzt.
**Weitere Optionen (Auszug):**
- `INCLUDE_DIRS`: Array der zu sichernden Verzeichnisse.
@@ -166,4 +172,4 @@ Wir freuen uns auf deinen Besuch und helfen dir gerne weiter!
<p align="center">
<img src="https://assets.techniverse.net/f1/logos/small/license.png" alt="License" width="15" height="15"> <a href="./pbs-backup-client-script/src/branch/main/LICENSE">License</a> | <img src="https://assets.techniverse.net/f1/logos/small/matrix2.svg" alt="Matrix" width="15" height="15"> <a href="https://matrix.to/#/#community:techniverse.net">Matrix</a> | <img src="https://assets.techniverse.net/f1/logos/small/mastodon2.svg" alt="Matrix" width="15" height="15"> <a href="https://social.techniverse.net/@donnerwolke">Mastodon</a>
</p>
</p>

View File

@@ -4,6 +4,19 @@ export PBS_REPOSITORY=""
export PBS_FINGERPRINT=""
PBS_API=""
# --- PBS BasicAuth / HTTP-Proxy (optional) --- #
# proxmox-backup-client kann BasicAuth fuer HTTP-Proxies ueber ALL_PROXY nutzen.
# https://pbs.proxmox.com/docs/backup-client.html#environment-variables
# Entweder eine komplette Proxy-URL setzen:
PBS_BASIC_AUTH_ENABLED=false
PBS_BASIC_AUTH_PROXY_URL=""
# Oder die URL aus Einzelwerten bauen lassen:
PBS_BASIC_AUTH_PROXY_SCHEME="http"
PBS_BASIC_AUTH_PROXY_HOST=""
PBS_BASIC_AUTH_PROXY_PORT=""
PBS_BASIC_AUTH_USER=""
PBS_BASIC_AUTH_PASSWORD=""
# --- Quellen (Array!) --- #
INCLUDE_DIRS=(
"/home/"

View File

@@ -12,6 +12,7 @@
# - Locking, Exit-Codes, externe Config, Dry-Run, robuste Fehlerbehandlung hinzugefügt
# - Konfiguration ausgelagertin eigene Konfigurationsdatei
# - Backup-OK-Datei für externes Monitoring implementiert
# - Optionale PBS BasicAuth via HTTP-Proxy/ALL_PROXY hinzugefügt
set -Eeuo pipefail
umask 077
@@ -50,6 +51,47 @@ check_dep() {
bool() { [[ "${1,,}" == "true" || "$1" == "1" || "${1,,}" == "yes" ]]; }
url_encode_userinfo() {
local raw="$1" out="" char hex
local i
local LC_ALL=C
for (( i=0; i<${#raw}; i++ )); do
char="${raw:i:1}"
case "$char" in
[a-zA-Z0-9.~_-]) out+="$char" ;;
*) printf -v hex '%%%02X' "'$char"; out+="$hex" ;;
esac
done
printf "%s" "$out"
}
build_basic_auth_proxy_url() {
local result_var="$1"
printf -v "$result_var" "%s" ""
bool "${PBS_BASIC_AUTH_ENABLED:-false}" || return 0
if [[ -n "${PBS_BASIC_AUTH_PROXY_URL:-}" ]]; then
printf -v "$result_var" "%s" "$PBS_BASIC_AUTH_PROXY_URL"
return 0
fi
[[ -n "${PBS_BASIC_AUTH_PROXY_HOST:-}" ]] || die "PBS_BASIC_AUTH_PROXY_HOST ist leer, obwohl PBS_BASIC_AUTH_ENABLED aktiv ist."
[[ -n "${PBS_BASIC_AUTH_USER:-}" ]] || die "PBS_BASIC_AUTH_USER ist leer, obwohl PBS_BASIC_AUTH_ENABLED aktiv ist."
[[ -n "${PBS_BASIC_AUTH_PASSWORD:-}" ]] || die "PBS_BASIC_AUTH_PASSWORD ist leer, obwohl PBS_BASIC_AUTH_ENABLED aktiv ist."
local scheme="${PBS_BASIC_AUTH_PROXY_SCHEME:-http}"
[[ "$scheme" == "http" ]] || die "PBS_BASIC_AUTH_PROXY_SCHEME='$scheme' wird nicht unterstützt. proxmox-backup-client unterstützt für ALL_PROXY aktuell HTTP-Proxies."
local user pass url
user="$(url_encode_userinfo "$PBS_BASIC_AUTH_USER")"
pass="$(url_encode_userinfo "$PBS_BASIC_AUTH_PASSWORD")"
url="${scheme}://${user}:${pass}@${PBS_BASIC_AUTH_PROXY_HOST}"
[[ -n "${PBS_BASIC_AUTH_PROXY_PORT:-}" ]] && url+=":${PBS_BASIC_AUTH_PROXY_PORT}"
printf -v "$result_var" "%s" "$url"
}
print_usage() {
cat <<EOF
Usage: $SCRIPT_NAME [Optionen]
@@ -148,6 +190,8 @@ send_ntfy() {
# ---------- Backup ---------- #
run_backup() {
local cmd=("proxmox-backup-client" "backup" "--repository" "$PBS_REPOSITORY")
local basic_auth_proxy_url=""
build_basic_auth_proxy_url basic_auth_proxy_url
for dir in "${INCLUDE_DIRS[@]}"; do
local base; base="$(basename "$dir")"
@@ -156,6 +200,7 @@ run_backup() {
local cmd_pretty; cmd_pretty="$(printf "%q " "${cmd[@]}")"
log "INFO" "Backup-Command: ${cmd_pretty} # PBS_PASSWORD via env"
[[ -n "$basic_auth_proxy_url" ]] && log "INFO" "PBS BasicAuth via ALL_PROXY ist aktiviert (Credentials werden nicht geloggt)."
if $DRY_RUN; then
log "INFO" "DRY-RUN aktiv: Es wird nichts ausgeführt."
@@ -174,6 +219,7 @@ run_backup() {
if (
[[ -n "${PBS_API:-}" ]] && export PBS_PASSWORD="$PBS_API"
[[ -n "${PBS_FINGERPRINT:-}" ]] && export PBS_FINGERPRINT
[[ -n "$basic_auth_proxy_url" ]] && export ALL_PROXY="$basic_auth_proxy_url"
"${cmd[@]}"
) 2>&1 | tee -a "$LOGFILE" | tee -a "$RUNLOG"
then