パスワード認証とアラートシステムを基にした自動化Rsyncバックアップ

上級

これは自動化ワークフローで、21個のノードを含みます。主にIf, Set, ManualTrigger, ExecuteCommand, ScheduleTriggerなどのノードを使用。 パスワード認証とアラートシステムを備えた自動化Rsyncバックアップ

前提条件
  • 特別な前提条件なし、インポートしてすぐに使用可能

カテゴリー

-
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定を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": "手動トリガー",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2800,
        224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "f4d96789-441a-4152-b4d8-6922581dfe5b",
      "name": "サーバーパラメータ",
      "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": "ローカルのSshpass確認",
      "type": "n8n-nodes-base.executeCommand",
      "position": [
        -2352,
        224
      ],
      "parameters": {
        "command": "which sshpass"
      },
      "typeVersion": 1,
      "continueOnFail": true
    },
    {
      "id": "98869a56-7d59-4055-bbf8-d437f6d7ca12",
      "name": "ローカルにインストール済み?",
      "type": "n8n-nodes-base.if",
      "position": [
        -2128,
        224
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.exitCode }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5fdd117b-5e40-4f21-987c-7ca7fb5b2c8b",
      "name": "ローカルにSshpassをインストール",
      "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": "ソースサーバーのSshpass確認",
      "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": "ソースにインストール済み?",
      "type": "n8n-nodes-base.if",
      "position": [
        -1472,
        224
      ],
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{ $json.exitCode }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b302372f-007c-4afa-89e1-a453e03064c8",
      "name": "ソースにSshpassをインストール",
      "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バックアップ実行",
      "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": "成功?",
      "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": "バックアップ成功",
      "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": "バックアップ失敗",
      "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": "処理完了レポート --- 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": "付箋",
      "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": "付箋1",
      "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": "付箋2",
      "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": "付箋3",
      "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": "付箋4",
      "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": "付箋5",
      "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": "付箋6",
      "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": "スケジュールトリガー",
      "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
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

上級

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
上級
ノード数21
カテゴリー-
ノードタイプ6
難易度説明

上級者向け、16ノード以上の複雑なワークフロー

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34