Initial commit

This commit is contained in:
Thorsten committed 2026-05-22 15:17:39 +02:00
commit 80a5394548
4 files changed
+251

No files matched your search

+1
View File
@@ -0,0 +1 @@
shell_ntfy_remote_shutdown.env.own
+101
View File
@@ -0,0 +1,101 @@
## Skript zum herunterfahren einer entfernten Computers
Dieses Skript automatisiert das Herunterfahren eines Servers per SSH und sendet anschließend eine Benachrichtigung an einen NTFY-Server.
Für die Benachrichtigungen wird `curl` verwendet.
Das Herunterfahren erfolgt per `ssh`. Dafür muss zuvor ein SSH-Key zwischen den Systemen ausgetauscht werden.
### Funktionen
- Sendet eine Benachrichtigung an einen NTFY-Server mit benutzerdefinierten Details.
- Führt das Herunterfahren eines Servers über SSH durch.
- Lädt Konfigurationsvariablen aus einer externen .env-Datei.
### Voraussetzungen
`curl` Benötigt für das Senden von HTTP-Anfragen.
`NTFY` Ein NTFY-Server für Benachrichtigungen
### Installation
1. Stellen Sie sicher, dass `curl` auf Ihrem System installiert sind:
```bash
sudo apt install curl
```
2. Platzieren Sie das Skript und eine .env-Datei im gleichen Verzeichnis. Die .env-Datei muss denselben Namen wie das Skript haben, jedoch mit der Endung .env (z. B. shell_ntfy_remote_shutdown.sh und shell_ntfy_remote_shutdown.env).
3. Setzen Sie die korrekten Dateiberechtigungen, um die Sicherheit zu gewährleisten:
```bash
chmod 700 shell_ntfy_remote_shutdown.sh
chmod 600 shell_ntfy_remote_shutdown.env
chmod +x shell_ntfy_remote_shutdown.sh
```
### Konfiguration
Erstellen Sie eine `.conf`-Datei mit den folgenden Variablen:
```bash
# NTFY Server
NTFY_URL=https://ntfy.server.net/
AUTH_TOKEN=tk_ntfytoken
# Duplicati Server
DUPLICATI_URL=http://192.168.178.100:8200
SERVER_NAME=unRAID
# NTFY Icon (Optional / Leer lassen falls nicht benötigt)
ICON=http://192.168.178.25:3030/icons/qnap-ts-412.png
# Entfernter Computer
SSH_HOST=192.168.178.105
SSH_USER=admin
SSH_KEY=/config/.ssh/id_ed25519
```
### Beschreibung der Variablen
```bash
NTFY_URL: Die Basis-URL des NTFY-Servers.
AUTH_TOKEN: Authentifizierungstoken für den NTFY-Server.
DUPLICATI_URL: URL zum Öffnen des Duplicati-Backup-Dashboards.
SERVER_NAME: Anzeigename des Servers.
ICON: URL für das Benachrichtigungssymbol.
SSH_HOST: Hostname oder IP-Adresse des Servers.
SSH_USER: Benutzername für die SSH-Anmeldung.
SSH_KEY: Pfad zum privaten SSH-Key.
```
### SSH-Key erstellen und austauschen
Für die passwortlose SSH-Anmeldung muss zunächst ein SSH-Key erzeugt und auf das Zielsystem kopiert werden.
#### 1. SSH-Key erstellen
```bash
ssh-keygen -t ed25519
```
Dadurch werden folgende Dateien erzeugt:
```bash
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
```
#### 2. Public Key auf das Zielsystem kopieren
```bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub USER@HOST
```
Beispiel:
```bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@192.168.178.105
```
### Verwendung des Scripts
- Führen Sie das Skript aus:
```bash
./shell_ntfy_remote_shutdown.sh
```
+15
View File
@@ -0,0 +1,15 @@
# NTFY Server
NTFY_URL=https://ntfy.server.net/
AUTH_TOKEN=tk_ntfytoken
# Duplicati Server
DUPLICATI_URL=http://192.168.178.100:8200
SERVER_NAME=unRAID
# NTFY Icon (Optional / Leer lassen falls nicht benötigt)
ICON=http://192.168.178.25:3030/icons/qnap-ts-412.png
# Entfernter Computer
SSH_HOST=192.168.178.105
SSH_USER=admin
SSH_KEY=/config/.ssh/id_ed25519
+134
View File
@@ -0,0 +1,134 @@
#!/bin/bash
set -u
# Pfad zur .env-Datei dynamisch ermitteln
ENV_FILE="$(dirname "$(realpath "$0")")/$(basename "$0" .sh).env"
# Prüfen, ob die .env-Datei existiert
if [[ ! -f "$ENV_FILE" ]]; then
echo "Fehler: Konfigurationsdatei $ENV_FILE nicht gefunden."
exit 1
fi
# .env-Datei laden
source "$ENV_FILE"
SSH_TARGET="$SSH_USER@$SSH_HOST"
echo "Starte Shutdown von $SSH_TARGET ..."
# Mögliche Shutdown-Kommandos für alte QNAPs / Linux-Systeme
SHUTDOWN_COMMANDS=(
"poweroff"
"/sbin/poweroff"
"shutdown now"
"/sbin/shutdown now"
"halt"
"/sbin/halt"
"init 0"
)
shutdown_success=false
successful_command=""
ssh_error=""
for cmd in "${SHUTDOWN_COMMANDS[@]}"; do
echo "Teste: $cmd"
ssh_output=$(
ssh \
-i "$SSH_KEY" \
-o ConnectTimeout=10 \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
"$SSH_TARGET" "$cmd" 2>&1
)
exit_code=$?
echo "$ssh_output"
# Erfolgreich ausgeführt
if [[ $exit_code -eq 0 ]]; then
echo "Shutdown erfolgreich mit: $cmd"
shutdown_success=true
successful_command="$cmd"
break
fi
# Viele Systeme schließen SSH sofort beim Shutdown
if echo "$ssh_output" | grep -qiE "connection closed|broken pipe|connection reset"; then
echo "SSH-Verbindung beim Shutdown getrennt: $cmd"
shutdown_success=true
successful_command="$cmd"
break
fi
ssh_error="$ssh_output"
sleep 2
done
# NTFY Nachricht vorbereiten
if [[ "$shutdown_success" == true ]]; then
TITLE="Backups beendet"
MESSAGE="QNAP wird heruntergefahren.
Server: \`$SERVER_NAME\`"
TAGS="checkered_flag"
PRIORITY="default"
else
TITLE="QNAP Shutdown fehlgeschlagen"
MESSAGE="Das QNAP konnte nicht heruntergefahren werden.
Server: \`$SERVER_NAME\`
SSH Fehler: \`$ssh_error\`"
TAGS="warning"
PRIORITY="high"
fi
# JSON Payload sicher erzeugen
JSON_PAYLOAD=$(jq -n \
--arg topic "Duplicati" \
--arg title "$TITLE" \
--arg message "$MESSAGE" \
--arg url "$DUPLICATI_URL" \
'{
topic: $topic,
title: $title,
message: $message,
click: "",
actions: [
{
action: "view",
label: "Duplicati öffnen",
url: $url
}
]
}'
)
# Debug optional
echo "$JSON_PAYLOAD"
# NTFY senden
curl -s -X POST "$NTFY_URL" \
-H "Authorization: Bearer $AUTH_TOKEN" \
-H "Priority: $PRIORITY" \
-H "Tags: $TAGS" \
${ICON:+-H "Icon: $ICON"} \
-H "Markdown: yes" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD"
# Passender Exitcode
if [[ "$shutdown_success" == true ]]; then
exit 0
else
exit 1
fi