8
n8n 한국어amn8n.com

비밀번호 인증 및 알림 시스템 기반 자동화 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