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`
|
- Locking via `flock`, saubere Exit-Codes, robustes Fehlerhandling, `--dry-run`
|
||||||
- Healthcheck-OK-Datei für externes Monitoring (z. B. PRTG)
|
- Healthcheck-OK-Datei für externes Monitoring (z. B. PRTG)
|
||||||
- TLS-Fingerprint nur bei selbstsigniertem PBS-Zertifikat notwendig (optional)
|
- TLS-Fingerprint nur bei selbstsigniertem PBS-Zertifikat notwendig (optional)
|
||||||
|
- Optionale BasicAuth fuer HTTP-Proxy-Zugriff zum PBS
|
||||||
|
|
||||||
## Konfiguration
|
## 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:
|
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.
|
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_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_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):**
|
**Weitere Optionen (Auszug):**
|
||||||
- `INCLUDE_DIRS`: Array der zu sichernden Verzeichnisse.
|
- `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">
|
<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>
|
<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=""
|
export PBS_FINGERPRINT=""
|
||||||
PBS_API=""
|
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!) --- #
|
# --- Quellen (Array!) --- #
|
||||||
INCLUDE_DIRS=(
|
INCLUDE_DIRS=(
|
||||||
"/home/"
|
"/home/"
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
# - Locking, Exit-Codes, externe Config, Dry-Run, robuste Fehlerbehandlung hinzugefügt
|
# - Locking, Exit-Codes, externe Config, Dry-Run, robuste Fehlerbehandlung hinzugefügt
|
||||||
# - Konfiguration ausgelagertin eigene Konfigurationsdatei
|
# - Konfiguration ausgelagertin eigene Konfigurationsdatei
|
||||||
# - Backup-OK-Datei für externes Monitoring implementiert
|
# - Backup-OK-Datei für externes Monitoring implementiert
|
||||||
|
# - Optionale PBS BasicAuth via HTTP-Proxy/ALL_PROXY hinzugefügt
|
||||||
|
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
umask 077
|
umask 077
|
||||||
@@ -50,6 +51,47 @@ check_dep() {
|
|||||||
|
|
||||||
bool() { [[ "${1,,}" == "true" || "$1" == "1" || "${1,,}" == "yes" ]]; }
|
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() {
|
print_usage() {
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
Usage: $SCRIPT_NAME [Optionen]
|
Usage: $SCRIPT_NAME [Optionen]
|
||||||
@@ -148,6 +190,8 @@ send_ntfy() {
|
|||||||
# ---------- Backup ---------- #
|
# ---------- Backup ---------- #
|
||||||
run_backup() {
|
run_backup() {
|
||||||
local cmd=("proxmox-backup-client" "backup" "--repository" "$PBS_REPOSITORY")
|
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
|
for dir in "${INCLUDE_DIRS[@]}"; do
|
||||||
local base; base="$(basename "$dir")"
|
local base; base="$(basename "$dir")"
|
||||||
@@ -156,6 +200,7 @@ run_backup() {
|
|||||||
|
|
||||||
local cmd_pretty; cmd_pretty="$(printf "%q " "${cmd[@]}")"
|
local cmd_pretty; cmd_pretty="$(printf "%q " "${cmd[@]}")"
|
||||||
log "INFO" "Backup-Command: ${cmd_pretty} # PBS_PASSWORD via env"
|
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
|
if $DRY_RUN; then
|
||||||
log "INFO" "DRY-RUN aktiv: Es wird nichts ausgeführt."
|
log "INFO" "DRY-RUN aktiv: Es wird nichts ausgeführt."
|
||||||
@@ -174,6 +219,7 @@ run_backup() {
|
|||||||
if (
|
if (
|
||||||
[[ -n "${PBS_API:-}" ]] && export PBS_PASSWORD="$PBS_API"
|
[[ -n "${PBS_API:-}" ]] && export PBS_PASSWORD="$PBS_API"
|
||||||
[[ -n "${PBS_FINGERPRINT:-}" ]] && export PBS_FINGERPRINT
|
[[ -n "${PBS_FINGERPRINT:-}" ]] && export PBS_FINGERPRINT
|
||||||
|
[[ -n "$basic_auth_proxy_url" ]] && export ALL_PROXY="$basic_auth_proxy_url"
|
||||||
"${cmd[@]}"
|
"${cmd[@]}"
|
||||||
) 2>&1 | tee -a "$LOGFILE" | tee -a "$RUNLOG"
|
) 2>&1 | tee -a "$LOGFILE" | tee -a "$RUNLOG"
|
||||||
then
|
then
|
||||||
|
|||||||
Reference in New Issue
Block a user