BASIC_AUTH_PROXY hinzugefügt
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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/"
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user