짜르방/므흣짤방

rsync sshpass로 패스입력없이 백업하기

비개인오후 2016. 12. 19. 21:15

상황

- A서버의 데이터를(/home/daehan/data) rsync를 사용해서 B서버(/home/backup/)로 백업.

- A서버 B서버 모두 rsync 설치됨.

- A 서버(예 mystory.com) - 계정아이디 daehan / 패스 daepass / ssh포트는 2030

- B서버에서 rsync 실행. root권한.

- crontab 에 등록해서 주기적으로 백업.


인터넷에서 찾아보면 rsyncd.conf 파일만들고 어쩌구 하던데 그냥 양쪽에 rsync 설치만 해도 되네..



일반적으로 rsync 사용시 ssh 포트를 안바꿨다면

]# rsync -avr --delete daehan@mystory.com:/home/daehan/data /home/backup/


daehan 패스워드 입력하라고 하면 입력해주고 끝.

이렇게만 해줘도 된다.


나처럼 애들이 찝접대는거 싫어해서 ssh 포트를 바꿨다면...

]# rsync -avr --delete -e 'ssh -p 2030' daehan@mystory.com:/home/daehan/data /home/backup/

또는 --rsh 옵션으로 하면된다.

]# rsync -avr --delete --rsh="ssh -p 2030" daehan@mystory.com:/home/daehan/data /home/backup/



crontab 등에 등록해서 사용하려면 sshpass라는것을 사용하면 된다. 설치법은 쉬우니 알아서 검색.

-e 옵션 사용시
-e "sshpass -p 패스워드 ssh -l 계정이름 -p 포트번호"

--rsh 옵션을 사용시
--rsh="sshpass -p 패스워드 ssh -l 계정이름 -p 포트번호"

난 --rsh 로 사용. -e 옵션으로 해도 된다.

그냥 한다면
]# rsync -avr --delete --rsh="sshpass -p daepass ssh -l daehan" mystory.com:/home/daehan/data /home/backup/

난 포트를 바꿔줬으니 ssh 포트옵션을 추가로 써준다.
]# rsync -avr --delete --rsh="sshpass -p daepass ssh -p 2030 -l daehan" mystory.com:/home/daehan/data /home/backup/


B서버의 크론탭에 추가하려면 명령복사해서 크론탭에 등록.
매일새벽 5시에 mystory.com 서버의 data 디렉토리 백업
]# crontab -e
* 5 * * * rsync -avr --delete --rsh="sshpass -p daepass ssh -p 2030 -l daehan" mystory.com:/home/daehan/data /home/backup/





참고.

ㅁ rsync Options
-P  (--partial --progress) 이어받기(iso 같이 큰 파일에 유용)와 전송 진행상황 출력
-C  (--cvs-exclude) CVS에서 무시하는 파일을 무시. 예, CVS, *~, #*, *.old, *.bak, *.o core 등
--delete      송신 측에 없는 파일을 삭제
-z  (--compress) 전송 내용 압축
--exclude PATTERN      지정된 패턴을 전송할 때 제외(파일/디렉토리/와일드카드 모두 사용가능)
-a  (--archive) 디렉토리 구조 전체를 파일 속성을 유지한체로 옮김
-u  (--update) 나중에 수정된 파일은 유지. (클라이언트와 서버의 시스템 시간 차이가 작다는 가정하에)
-v  (--verbose) 전송 상황과 결과 출력
-e  (--rsh) 전송방법 선택. 뒤에 아규먼트로 ssh
-n  (--dry-run) 실제 파일을 전송하지 않는다. 실제 전송하기 전에 테스트용으로 사용