비밀번호 인증 및 알림 시스템 기반 자동화 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)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Robot Framework, ArgoCD 및 전체 KinD 라이프사이클을 사용한 자동화된 Kubernetes 테스트
Robot Framework, ArgoCD, 전체 KinD 라이프사이클 기반 자동 Kubernetes 테스트
If
Set
Gitlab
+
If
Set
Gitlab
73 노드Vigh Sandor
데브옵스
Telegram AI 채널 로봇 - 텍스트 및 이미지 응답을 지원하는 TGPT 생성기
GPT-4와 TGPT를 사용하여 Telegram 채널에서 텍스트 및 이미지 응답 생성
If
Set
Code
+
If
Set
Code
22 노드Vigh Sandor
Kubernetes 모니터링 및 알림 - 배포 및 Pod 상태 - Telegram 알림
Kubernetes 배포와 Pod 모니터링, Telegram 경고
If
Code
Telegram
+
If
Code
Telegram
14 노드Vigh Sandor
시각화 참조 라이브러리에서 n8n 노드를 탐색
可视化 참조 라이브러리에서 n8n 노드를 탐색
If
Ftp
Set
+
If
Ftp
Set
113 노드I versus AI
기타
Google 연락처와 Notion 양방향 동기화
双向동기화 Google 通讯录与 Notion
If
Set
Merge
+
If
Set
Merge
82 노드Solomon
기타
AI 부동산 중개인: 종단간 운영 자동화 (웹, 데이터, 음성)
AI 부동산 중개인: 종단간 운영 자동화 (웹, 데이터, 음성)
If
Set
Code
+
If
Set
Code
45 노드Sam Yassine
영업