SSH 자동 원격 백업

SSH 자동 원격 백업

나는 두 대의 기계를 가지고 A있고 B. ASSH를 통해 머신 에 액세스할 수 있습니다 B. A사용 가능한 공간이 많이 있습니다. B데이터가 위험한 상황에 있습니다. B모든 데이터를 자동으로 백업하는 방법 A.매우 자주 수행할 필요는 없지만 핸즈프리여야 합니다. 모든 A시작은 충분히 빈번합니다. 동기화가 가능하다고 들었습니다.

답변1

대부분의 Linux 배포판에서 매일 이 작업을 수행하려면 다음 명령을 입력하면 됩니다 rsync.@guido의 답변)를 스크립트에 추가하고 해당 스크립트를 /etc/cron.daily디렉터리에 넣습니다. anacron설치되어 있는 한 (기본적으로는 그렇지 않을 수 있음) cron.daily다음에 컴퓨터가 시작될 때(또는 컴퓨터가 전환되면 자정에 실행될 때) 누락된 작업이 모두 포착됩니다.

스크립트의 경우 다음을 수행하면 됩니다.

#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder

-z백업이 느린 연결을 통해 이루어지거나 대역폭을 절약하려는 경우 (압축) 옵션을 추가할 수 있지만 제 경험상 실제로는 최신 시스템/네트워크의 성능을 저하시킬 수 있습니다.

각 백업의 로그를 유지하려면 다음을 수행할 수 있습니다.

#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
  >/var/log/backup_log 2>&1

이것이 cron 작업으로 작동하려면 다음이 있어야 합니다.비밀번호 없는 SSH로 설정뿌리서버A에서 서버B에 로그인합니다. 작업이 루트로 실행되므로 루트 계정(즉, 유형 /root/.ssh) 이어야 합니다.cron.daily

답변2

나는 사용하는 것이 좋습니다rdiff 백업. 이제 저는 이를 사용하여 매일 밤 내 데이터(워크스테이션 2개, 서버 2개, 다른 사람 서버의 계정)를 자동으로 증분 백업합니다.

이전에 rsync를 사용한 적이 있지만 더 편리하고 가상 머신 디스크 이미지와 같은 대용량 파일의 증분 백업을 수행할 수 있기 때문에 rdiff-backup으로 전환했습니다. rdiff-backup은 이전 rsync 백업 스크립트와 매우 비슷하지만 완료되었습니다.옳은.

스크립트 파일을 넣었어요/etc/cron.daily백업이 저장된 머신에서는 매일 아침 rdiff-backup이 시작되고 원격 머신에서 데이터를 가져옵니다.

답변3

이전의 모든 답변 외에도 다음은 SSH 키에 의존하는 답변입니다. 이는 해당 키로 로그인할 때 수행할 수 있는 작업을 제한합니다.

서버 A에서

이 시점에서는 별도의 사용자를 만들거나 기존 사용자 이름 중 하나를 사용하는 것이 중요하지 않습니다. 하지만 저라면 별도의 사용자를 만들 것입니다. bkpuser아래 예에서는 두 서버 모두에 대한 사용자 이름을 사용 하겠습니다 .

로그인 후 bkpuser비밀번호 없이 SSH 키를 생성하세요.

서버 B에서

PubkeyAuthentication에서 활성화되었습니다 sshd_config.

사용자를 생성하십시오 bkpuser. 매우 복잡한 비밀번호를 설정하거나 이 사용자에 대한 비밀번호 로그인을 비활성화하십시오(이 작업을 수행하는 방법은 실행 중인 유닉스 및 배포판에 따라 다릅니다). 중요한 점은 사용자가 SSH 키를 통해서만 로그인할 수 있다는 것입니다. bkpuser백업하려는 모든 디렉터리와 파일에 대한 읽기 권한이 있는지 확인하세요 .

A에서 생성된 키의 공개 부분을 ~bkpuser/.ssh/authorized_keysB 에 복사합니다. 연결 시 자동으로 명령을 실행하도록 편집되었습니다. 이 명령은 쉘 스크립트에 대한 포인터가 되어서는 안 됩니다. 대신 쉘 스크립트가 키에 직접 삽입됩니다. 또한 키를 서버 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.....

서버 A에서

항목을 지원하는 cron 탭 중 하나를 사용하는 경우 명령을 사용하여 @reboot해당 항목을 s crontab에 추가하십시오. 허용되지 않는 경우 언제든지 설정할 수 있습니다. 내 데이터라면 아마도 매일 이 작업을 수행할 것입니다.bkpuserssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz

답변4

rsync를 사용하여 이를 달성할 수 있습니다(역방향).

serverA# rsync -avz user@serverB:/path-to-backup.tar.gz /var/backup

어디:

-avz  archive, compress and be verbose

관련 정보