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

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.

Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes21
Kategorie-
Node-Typen6
Schwierigkeitsbeschreibung

Für fortgeschrittene Benutzer, komplexe Workflows mit 16+ Nodes

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34