답변:
대부분의 Linux 배포판에서 매일이 작업을 수행하려면 rsync
명령을 @guido의 답변 에 따라 스크립트에 넣고 스크립트를 /etc/cron.daily
디렉토리 에 넣으면 됩니다. 긴만큼 anacron
(기본적으로하지 않을 수 있습니다) 설치되어있는 놓친 cron.daily
작업은 기계 부츠 (뿐만 아니라 자정에 실행되고 기계가 전환되면) 다음 번에 잡았다됩니다.
스크립트의 경우 다음을 수행하십시오.
#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder
-z
백업이 느린 (ish) 연결을 통해 또는 대역폭을 절약하려는 경우 (압축) 옵션을 추가 할 수 있지만 실제로는 최신 컴퓨터 / 네트워크의 성능이 저하됩니다.
각 백업의 로그를 유지하려면 다음과 같이 할 수 있습니다.
#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
>/var/log/backup_log 2>&1
이 작업이 크론 작업으로 작동하려면 serverA 에 root로 설정 하여 serverB에 로그인하도록 비밀번호없는 ssh를 설정 해야합니다 . 작업은 루트로 실행 되므로 루트 계정 (예 : 키 ) 이어야합니다 ./root/.ssh
cron.daily
anacron
사용자 cron
작업 당 수령하지 않습니다 . 스크립트에서 su
/ sudo
를 사용 하여 특정 사용자로 rsync를 실행할 수는 있지만 그러나 키는보다 안전하게 유지됩니다 /root
.
ls -l
일부 파일 의 출력을 질문에 추가하면 사람들이 추가 조언을 줄 수 있습니다.
rdiff-backup 사용을 제안 합니다. 이제 매일 밤 내 자체 데이터 (워크 스테이션 2 대, 서버 2 대, 다른 서버의 계정 1 대)를 자동 증분 백업하는 데 사용합니다.
이전에는 rsync를 사용했지만 더 편리하기 때문에 rdiff-backup으로 전환했으며 가상 머신 디스크 이미지와 같은 대용량 파일을 증분 백업 할 수 있습니다. rdiff는 백업은 내 이전 rsync를 백업 scrips에 같은 많은,하지만 이루어집니다 권리 .
백업이 저장되어있는 시스템 에서 스크립트 파일을 /etc/cron.daily 에 저장했습니다. 매일 아침 일찍 rdiff-backup을 시작하고 원격 시스템에서 데이터를 가져옵니다.
이전의 모든 답변 외에도 SSH 키를 사용하여 해당 키로 로그인 할 때 수행 할 수있는 작업에 대한 제한 사항이 있습니다.
이 경우 별도의 사용자를 만들거나 기존 사용자 이름 중 하나를 사용하는 경우 덜 중요하지만, 나인 경우 별도의 사용자를 만들 것입니다. bkpuser
아래 예제에서 두 서버 의 사용자 이름 을 사용합니다 .
로그인시 bkpuser
비밀번호없이 SSH 키를 작성하십시오.
사용 PubkeyAuthentication
에서 sshd_config
.
사용자를 작성하십시오 bkpuser
. 매우 복잡한 암호를 설정하거나 해당 사용자의 암호 로그인을 비활성화하십시오 (정확하게 수행하는 방법은 실행중인 유닉스와 배포판에 따라 다릅니다). 요점은 사용자가 SSH 키로 만 로그인해야한다는 것입니다. bkpuser
백업하려는 모든 디렉토리 및 파일에 대한 읽기 액세스 권한이 있는지 확인하십시오 .
A에서 작성된 키의 공용 부분 ~bkpuser/.ssh/authorized_keys
을 B 에서 복사하십시오 . 연결시 명령을 자동으로 실행하도록를 편집하십시오. 이 명령은 쉘 스크립트에 대한 포인터가 아니어야합니다. 대신 쉘 스크립트를 키에 직접 삽입하십시오. 키를 서버 A에서만 사용할 수 있고 다른 서버에서는 사용할 수 없도록 제한 사항도 포함하십시오. 아래 예에서 서버 A에 IP 주소를 제공 10.1.2.3
하고 백업하려는 파일이 모두 아래에 있다고 가정합니다 /data
.
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....
@reboot
항목 을 지원하는 cron 탭 중 하나를 사용하는 경우 명령을 사용하여 해당 항목을 bkpuser
s crontab에 추가하십시오 ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
. 허용되지 않으면 언제든지 설정하십시오. 내 데이터 인 경우 매일 수행 할 것입니다.
다음은 SSH를 사용하여 매일 오전 4시에 서버 B를 서버 A에 백업하는 완벽한 솔루션입니다.
서버 B에서 서버 A로 자동 SSH 연결 작성
ssh-keygen -t dsa -b 1024
ssh-copy-id -i ~/.ssh/id_dsa.pub "-p ssh_port root@server_a"
서버 B에서 백업 스크립트 작성
나노 / 루트 / 백업
# !/bin/sh
# Variables loading
HOST="root@server_a"
PORT=22
DIR="/var/backups/server_b"
# Directories creating
ssh -p $PORT $HOST <<EOF
mkdir -p $DIR/home
logout
EOF
# Files backing up
rsync -aze "ssh -p $PORT" --delete /home/user $HOST:$DIR/home
chmod 744 / root / backup
서버 B에서 백업 자동화
크론 탭 -e
0 4 * * * /root/backup > /dev/null
자세한 내용은 Linux에서 비밀번호를 입력하지 않고 SSH에 연결 및 Debian 또는 Ubuntu Linux에서 서버 백업 페이지를 참조하십시오 .
문제의 요점은 자동으로 수행하는 방법입니다 (암호를 입력하지 않아도 됨).
screen
또는 tmux
세션을 시작eval $(ssh-agent)
ssh-add
export RSYNC_RSH="ssh -i ~/.ssh/id_rsa ..."
while :; do rsync -av u@h:/p /local; sleep $[24*60*60]; done
ssh
.
RSYNC_SSH
SSH 키의 표준 위치를 검색 하기 위해 추가 할 필요가 없습니다 .