Automatisiertes Rsync-Backup mit Passwortauthentifizierung und Alarmsystem
Experte
Dies ist ein Automatisierungsworkflow mit 21 Nodes. Hauptsächlich werden If, Set, ManualTrigger, ExecuteCommand, ScheduleTrigger und andere Nodes verwendet. Automatisierte Rsync-Sicherung für Passwortauthentifizierung und Warnsysteme
Voraussetzungen
- •Keine besonderen Voraussetzungen, sofort nach Import nutzbar
Verwendete Nodes (21)
Kategorie
-
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
"id": "JxrInAO8OLCjxVC5",
"meta": {
"instanceId": "5c7ce220523e8664f49208a8be668a8dc6fab5f747ce4de865fa1309727919f1",
"templateCredsSetupCompleted": true
},
"name": "Automated Rsync Backup with Password Auth & Alert System",
"tags": [],
"nodes": [
{
"id": "5c38117c-4f04-4033-a570-cc3d55e78f17",
"name": "Manueller Trigger",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-2800,
224
],
"parameters": {},
"typeVersion": 1
},
{
"id": "f4d96789-441a-4152-b4d8-6922581dfe5b",
"name": "Server-Parameter",
"type": "n8n-nodes-base.set",
"position": [
-2576,
224
],
"parameters": {
"values": {
"string": [
{
"name": "source_host",
"value": "source_host_ip"
},
{
"name": "source_port",
"value": "source_host_ssh_port"
},
{
"name": "source_user",
"value": "source_user_username"
},
{
"name": "source_password",
"value": "=source_user_password"
},
{
"name": "source_folder",
"value": "source_path_on_the_source_host"
},
{
"name": "target_host",
"value": "target_host_ip"
},
{
"name": "target_port",
"value": "target_host_ssh_port"
},
{
"name": "target_user",
"value": "target_user_username"
},
{
"name": "target_password",
"value": "=target_user_password"
},
{
"name": "target_folder",
"value": "target_path_on_the_target_host"
},
{
"name": "rsync_options",
"value": "-avz --delete"
}
]
},
"options": {}
},
"typeVersion": 1
},
{
"id": "2856d809-25ad-46ba-8056-84e78c7fd66c",
"name": "Prüfe Sshpass lokal",
"type": "n8n-nodes-base.executeCommand",
"position": [
-2352,
224
],
"parameters": {
"command": "which sshpass"
},
"typeVersion": 1,
"continueOnFail": true
},
{
"id": "98869a56-7d59-4055-bbf8-d437f6d7ca12",
"name": "Lokal installiert?",
"type": "n8n-nodes-base.if",
"position": [
-2128,
224
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json.exitCode }}"
}
]
}
},
"typeVersion": 1
},
{
"id": "5fdd117b-5e40-4f21-987c-7ca7fb5b2c8b",
"name": "Installiere Sshpass lokal",
"type": "n8n-nodes-base.executeCommand",
"position": [
-1920,
320
],
"parameters": {
"command": "=if command -v apt-get &> /dev/null; then\n apt-get update && apt-get install -y sshpass rsync\nelif command -v yum &> /dev/null; then\n yum install -y epel-release && yum install -y sshpass rsync\nelif command -v dnf &> /dev/null; then\n dnf install -y sshpass rsync\nelif command -v apk &> /dev/null; then\n apk add sshpass rsync\nelse\n echo \"Unsupported package manager\"\n exit 1\nfi"
},
"typeVersion": 1
},
{
"id": "2e5c2163-e384-4488-9fb6-68d74ce3e932",
"name": "Prüfe Sshpass auf Quelle",
"type": "n8n-nodes-base.executeCommand",
"position": [
-1696,
224
],
"parameters": {
"command": "=sshpass -p '{{ $('Server Parameters').item.json.source_password }}' ssh -o StrictHostKeyChecking=no -p {{ $('Server Parameters').item.json.source_port }} {{ $('Server Parameters').item.json.source_user }}@{{ $('Server Parameters').item.json.source_host }} \"which sshpass\""
},
"typeVersion": 1,
"continueOnFail": true
},
{
"id": "5916c184-5925-4fb4-8c8e-accc74e4df29",
"name": "Auf Quelle installiert?",
"type": "n8n-nodes-base.if",
"position": [
-1472,
224
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json.exitCode }}"
}
]
}
},
"typeVersion": 1
},
{
"id": "b302372f-007c-4afa-89e1-a453e03064c8",
"name": "Installiere Sshpass auf Quelle",
"type": "n8n-nodes-base.executeCommand",
"position": [
-1248,
320
],
"parameters": {
"command": "=sshpass -p '{{ $('Server Parameters').item.json.source_password }}' ssh -o StrictHostKeyChecking=no -p {{ $('Server Parameters').item.json.source_port }} {{ $('Server Parameters').item.json.source_user }}@{{ $('Server Parameters').item.json.source_host }} \"if command -v apt-get &> /dev/null; then echo '{{ $('Server Parameters').item.json.source_password }}' | sudo -S apt-get update && echo '{{ $('Server Parameters').item.json.source_password }}' | sudo -S apt-get install -y sshpass rsync; elif command -v yum &> /dev/null; then echo '{{ $('Server Parameters').item.json.source_password }}' | sudo -S yum install -y epel-release && echo '{{ $('Server Parameters').item.json.source_password }}' | sudo -S yum install -y sshpass rsync; elif command -v dnf &> /dev/null; then echo '{{ $('Server Parameters').item.json.source_password }}' | sudo -S dnf install -y sshpass rsync; else echo 'Unsupported package manager'; exit 1; fi\""
},
"typeVersion": 1
},
{
"id": "93e5b9e9-5a31-404f-932c-ba050d10e5d5",
"name": "Rsync-Backup ausführen",
"type": "n8n-nodes-base.executeCommand",
"position": [
-1040,
224
],
"parameters": {
"command": "=sshpass -p '{{ $('Server Parameters').item.json.source_password }}' ssh -o StrictHostKeyChecking=no -p {{ $('Server Parameters').item.json.source_port }} {{ $('Server Parameters').item.json.source_user }}@{{ $('Server Parameters').item.json.source_host }} \"sshpass -p '{{ $('Server Parameters').item.json.target_password }}' rsync {{ $('Server Parameters').item.json.rsync_options }} -e 'ssh -o StrictHostKeyChecking=no -p {{ $('Server Parameters').item.json.target_port }}' {{ $('Server Parameters').item.json.source_folder }}/ {{ $('Server Parameters').item.json.target_user }}@{{ $('Server Parameters').item.json.target_host }}:{{ $('Server Parameters').item.json.target_folder }}/\""
},
"typeVersion": 1
},
{
"id": "e2b2ff1a-0d35-42ba-875d-8bb0e78dae8a",
"name": "Erfolgreich?",
"type": "n8n-nodes-base.if",
"position": [
-816,
224
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json.exitCode }}",
"operation": "equal"
}
]
}
},
"typeVersion": 1
},
{
"id": "ae9e2524-1b95-4473-8679-1b42809583cd",
"name": "Backup erfolgreich",
"type": "n8n-nodes-base.set",
"position": [
-592,
128
],
"parameters": {
"values": {
"string": [
{
"name": "status",
"value": "SUCCESS"
},
{
"name": "timestamp",
"value": "={{ $now.format('YYYY-MM-DD HH:mm:ss') }}"
},
{
"name": "source",
"value": "={{ $('Server Parameters').item.json.source_host }}:{{ $('Server Parameters').item.json.source_folder }}"
},
{
"name": "target",
"value": "={{ $('Server Parameters').item.json.target_host }}:{{ $('Server Parameters').item.json.target_folder }}"
},
{
"name": "output",
"value": "={{ $('Execute Rsync Backup').item.json.stdout }}"
}
]
},
"options": {}
},
"typeVersion": 1
},
{
"id": "3d4ee816-96aa-4ac3-ab96-54f8ab220807",
"name": "Backup fehlgeschlagen",
"type": "n8n-nodes-base.set",
"position": [
-592,
320
],
"parameters": {
"values": {
"string": [
{
"name": "status",
"value": "ERROR"
},
{
"name": "timestamp",
"value": "={{ $now.format('YYYY-MM-DD HH:mm:ss') }}"
},
{
"name": "source",
"value": "={{ $('Server Parameters').item.json.source_host }}"
},
{
"name": "target",
"value": "={{ $('Server Parameters').item.json.target_host }}"
},
{
"name": "output",
"value": "={{ $('Execute Rsync Backup').item.json.exitCode }} -- {{ $('Execute Rsync Backup').item.json.stderr }}"
}
]
},
"options": {}
},
"typeVersion": 1
},
{
"id": "f7d833ae-0003-48f8-8d13-4f22cb70f52f",
"name": "Abschlussbericht verarbeiten --- Telegram & SMS",
"type": "n8n-nodes-base.executeCommand",
"onError": "continueRegularOutput",
"position": [
-272,
224
],
"parameters": {
"command": "=apk add curl\n\nexport TOKEN=\"YOUR-TELEGRAM-BOT-TOKEN\"\nexport CHAT_ID=\"YOUR-TELEGRAM-CHANNEL-ID\"\nexport MESSAGE=\"{{ $json.timestamp }} -- {{ $json.status }} :: {{ $json.source }} -> {{ $json.target }} :: {{ $json.output }}\"\n\ncurl -s -X POST \"https://api.telegram.org/bot$TOKEN/sendMessage\" -d chat_id=\"$CHAT_ID\" -d text=\"$MESSAGE\"\n\nNUMBERS=\"+36301234567\"\n\nfor PHONE in $NUMBERS; do\n curl -X POST https://textbelt.com/text --data-urlencode phone=\"$PHONE\" --data-urlencode message=\"$MESSAGE\" -d key=YOUR-TEXTBELT-API-KEY\ndone"
},
"typeVersion": 1
},
{
"id": "4f541742-fac7-4d71-b236-c4bc65856f4a",
"name": "Notiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3088,
-240
],
"parameters": {
"width": 380,
"height": 232,
"content": "## Automated Rsync Backup\n\nPassword-based SSH backup between servers using rsync.\n\nAutomatically installs dependencies, performs backup from source to target server, and sends status notifications via Telegram and SMS.\n\nSupports Ubuntu, Debian, RHEL, CentOS, and Alpine."
},
"typeVersion": 1
},
{
"id": "b74c3604-78af-4a0c-a7df-b4bd0c1ecd71",
"name": "Notiz1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2576,
384
],
"parameters": {
"width": 340,
"height": 348,
"content": "## SERVER CONFIGURATION REQUIRED\n\nSource Server:\n- source_host, source_port, source_user\n- source_password, source_folder\n\nTarget Server:\n- target_host, target_port, target_user\n- target_password, target_folder\n\nRsync Options:\n- Default: -avz --delete\n- Archive, verbose, compress, mirror"
},
"typeVersion": 1
},
{
"id": "b6910e2a-f654-4918-a3e1-51bddbe9bb51",
"name": "Notiz2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2352,
-64
],
"parameters": {
"width": 340,
"height": 248,
"content": "## Dependency Management\n\nAutomatically checks and installs sshpass and rsync:\n1. Check if sshpass installed locally\n2. Install if missing (apt/yum/dnf/apk)\n3. Check sshpass on source server\n4. Install on source if needed (with sudo)\n\nNo manual installation required."
},
"typeVersion": 1
},
{
"id": "720d40a5-6799-4d92-8b2d-1b4e27e7408c",
"name": "Notiz3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1040,
-64
],
"parameters": {
"width": 320,
"height": 256,
"content": "## Backup Execution\n\nConnects to source server via SSH and executes rsync command.\n\nData transfers directly between source and target servers, not through n8n.\n\nUses password authentication for both connections with StrictHostKeyChecking disabled."
},
"typeVersion": 1
},
{
"id": "55adad40-e782-4687-bd28-d99414754a2e",
"name": "Notiz4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-592,
464
],
"parameters": {
"width": 300,
"height": 224,
"content": "## Status Handling\n\nChecks rsync exit code:\n- Exit 0: Success - captures stdout\n- Non-zero: Failure - captures exit code and stderr\n\nBoth paths generate detailed status report with timestamp and server info."
},
"typeVersion": 1
},
{
"id": "db8dbab3-3671-424e-b690-d82c56bed6c5",
"name": "Notiz5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-272,
-96
],
"parameters": {
"width": 340,
"height": 296,
"content": "## NOTIFICATION CONFIGURATION\n\nReplace placeholders:\n- YOUR-TELEGRAM-BOT-TOKEN\n- YOUR-TELEGRAM-CHANNEL-ID\n- +36301234567 (phone numbers)\n- YOUR-TEXTBELT-API-KEY\n\nSends success or failure report with timestamp, source, target, and output details."
},
"typeVersion": 1
},
{
"id": "0c19273d-a6a3-43c9-9f4a-a43f8a1029b1",
"name": "Notiz6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3248,
128
],
"parameters": {
"width": 388,
"height": 112,
"content": "## Scheduling\n\nCurrently manual trigger and Schedule Trigger."
},
"typeVersion": 1
},
{
"id": "f5f0cb34-f5a9-4ad9-a2ee-54852328bc54",
"name": "Zeitplan-Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-2800,
32
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "44bd3bc1-2f84-4948-b794-6a8b23b50258",
"connections": {
"e2b2ff1a-0d35-42ba-875d-8bb0e78dae8a": {
"main": [
[
{
"node": "ae9e2524-1b95-4473-8679-1b42809583cd",
"type": "main",
"index": 0
}
],
[
{
"node": "3d4ee816-96aa-4ac3-ab96-54f8ab220807",
"type": "main",
"index": 0
}
]
]
},
"3d4ee816-96aa-4ac3-ab96-54f8ab220807": {
"main": [
[
{
"node": "f7d833ae-0003-48f8-8d13-4f22cb70f52f",
"type": "main",
"index": 0
}
]
]
},
"5c38117c-4f04-4033-a570-cc3d55e78f17": {
"main": [
[
{
"node": "f4d96789-441a-4152-b4d8-6922581dfe5b",
"type": "main",
"index": 0
}
]
]
},
"f5f0cb34-f5a9-4ad9-a2ee-54852328bc54": {
"main": [
[
{
"node": "f4d96789-441a-4152-b4d8-6922581dfe5b",
"type": "main",
"index": 0
}
]
]
},
"ae9e2524-1b95-4473-8679-1b42809583cd": {
"main": [
[
{
"node": "f7d833ae-0003-48f8-8d13-4f22cb70f52f",
"type": "main",
"index": 0
}
]
]
},
"f4d96789-441a-4152-b4d8-6922581dfe5b": {
"main": [
[
{
"node": "2856d809-25ad-46ba-8056-84e78c7fd66c",
"type": "main",
"index": 0
}
]
]
},
"2856d809-25ad-46ba-8056-84e78c7fd66c": {
"main": [
[
{
"node": "98869a56-7d59-4055-bbf8-d437f6d7ca12",
"type": "main",
"index": 0
}
]
]
},
"98869a56-7d59-4055-bbf8-d437f6d7ca12": {
"main": [
[
{
"node": "2e5c2163-e384-4488-9fb6-68d74ce3e932",
"type": "main",
"index": 0
}
],
[
{
"node": "5fdd117b-5e40-4f21-987c-7ca7fb5b2c8b",
"type": "main",
"index": 0
}
]
]
},
"93e5b9e9-5a31-404f-932c-ba050d10e5d5": {
"main": [
[
{
"node": "e2b2ff1a-0d35-42ba-875d-8bb0e78dae8a",
"type": "main",
"index": 0
}
]
]
},
"5fdd117b-5e40-4f21-987c-7ca7fb5b2c8b": {
"main": [
[
{
"node": "2e5c2163-e384-4488-9fb6-68d74ce3e932",
"type": "main",
"index": 0
}
]
]
},
"2e5c2163-e384-4488-9fb6-68d74ce3e932": {
"main": [
[
{
"node": "5916c184-5925-4fb4-8c8e-accc74e4df29",
"type": "main",
"index": 0
}
]
]
},
"5916c184-5925-4fb4-8c8e-accc74e4df29": {
"main": [
[
{
"node": "93e5b9e9-5a31-404f-932c-ba050d10e5d5",
"type": "main",
"index": 0
}
],
[
{
"node": "b302372f-007c-4afa-89e1-a453e03064c8",
"type": "main",
"index": 0
}
]
]
},
"b302372f-007c-4afa-89e1-a453e03064c8": {
"main": [
[
{
"node": "93e5b9e9-5a31-404f-932c-ba050d10e5d5",
"type": "main",
"index": 0
}
]
]
}
}
}Häufig gestellte Fragen
Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Experte
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
Automatisierte Kubernetes-Tests mit Robot Framework, ArgoCD und vollem KinD-Lebenszyklus
Automatisierte Kubernetes-Tests auf Basis von Robot Framework, ArgoCD und einem vollständigen KinD-Lebenszyklus
If
Set
Gitlab
+
If
Set
Gitlab
73 NodesVigh Sandor
DevOps
Telegramm-KI-Kanal-Bot - TGPT-Generator mit Unterstützung für Text- und Bildantworten
Generieren von Text- und Bildantworten in einem Telegram-Kanal mit GPT-4 und TGPT
If
Set
Code
+
If
Set
Code
22 NodesVigh Sandor
Kubernetes-Monitoring und -Alarmierung - Deployment- und Pod-Status - Telegram-Alarmierung
Kubernetes-Bereitstellung und Pod-Überwachung mit Telegram-Alarmen
If
Code
Telegram
+
If
Code
Telegram
14 NodesVigh Sandor
n8n-Knoten in der visuellen Referenzbibliothek erkunden
Erkundung von n8n-Knoten in der visuellen Referenzbibliothek
If
Ftp
Set
+
If
Ftp
Set
113 NodesI versus AI
Sonstiges
Gegenseitige Synchronisation Google Kontakte mit Notion
Zweiseitige Synchronisation von Google Kontakten und Notion
If
Set
Merge
+
If
Set
Merge
82 NodesSolomon
Sonstiges
KI-Immobilienmakler: End-to-End-Betriebsautomatisierung (Web, Daten, Sprache)
KI-Immobilienmakler: End-to-End-Betriebsautomatisierung (Web, Daten, Sprache)
If
Set
Code
+
If
Set
Code
45 NodesSam Yassine
Vertrieb
Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes21
Kategorie-
Node-Typen6
Autor
Vigh Sandor
@vighsandorExterne Links
Auf n8n.io ansehen →
Diesen Workflow teilen