고급 개발자로 가는 길

OS/Linux

rsync 암호 서버 동기화

다크엔지니어 2020. 11. 18. 13:00
반응형

블로그 비밀번호를 까먹었다는 사실을 인지한후 많이 반성했다...

바쁘다는 핑계로 관리를 너무 소홀히 했다... ㅠ

 

우선 rsycn 는 증분 방식의 백업을 지원한다.

나는 요녀석을 서버에서 로컬에다가 데이터를 백업 하려 한다.

추가로 백업을 자동으로 하기위해 crontab 설정을 진행 할것이다. 단,,1!!@~@!@!

rsync 는 서버의 passwd 를 필요로 하는데 자동으로 하기위해 개인키를 통해 공개키를 서버와 동기화 할것이다.

그럼 crontab 에서 자동으로 rsync 사용이 가능하다.


시작해보자.

crontab -e


0 0 1 * * rsync -avzc dohyeon@@********:/:/disk1/yona-1.12.0 /backup/yona/. 1>/dev/null 2>/dev/null
0 1 1 * * sudo tar zcvf /backup/yona/yona-`date +\%Y\%m\%d`.tar.gz /backup/yona/yona-1.12.0 1>/dev/null 2>/dev/null

0 0 15 * * rsync -avzc dohyeon@@********:/:/disk1/yona-1.12.0 /backup/yona/. 1>/dev/null 2>/dev/null
0 1 15 * * sudo tar zcvf /backup/yona/yona-`date +\%Y\%m\%d`.tar.gz /backup/yona/yona-1.12.0 1>/dev/null 2>/dev/null

0 2 1 * * rsync -avz dohyeon@********:/disk1/backup-20201103.sql /backup/redmine/. 1>/dev/null 2>/dev/null
0 3 1 * * rsync -avz dohyeon@********:/disk1/redmine/* /backup/redmine/temp/. 1>/dev/null 2>/dev/null
0 4 1 * * sudo tar zcvf /backup/redmine/redmine-`date +\%Y\%m\%d`.tar.gz /backup/redmine/temp/* 1>/dev/null 2>/dev/null
0 5 1 * * rm -rf backup/redmine/temp/*

등을 설정 한 뒤

rsync 에서 local 에게 서버의 passwd 를 요청한다. 이를 해결 하기위해~

로컬에 공개키를 만들어보자. 아래 명령으로 local ssh path 와 passwd 를 설정해야 한다. (공개키를 위해선 passwd enter)

ssh-keygen -t rsa

이렇게 하면 local .ssh 에 rsa 와 rsa.pub 가 생성이된다.

 

그 다음 아래와 같이 scp 를 통해 서버에 공개키를 요청한다~

scp 가 안되면 cat ~/.ssh/id_rsa.pub | ssh dohyeon@******** "cat>> .ssh/authorized_keys" 를 사용해보자

이것도 안되면 ftp 로 시도

scp /home/dohyeon/.ssh/id_rsa.pub dohyeon@********:~/.ssh/authorized_keys

여기서,!

서버에 .ssh directory 가 없으면 생성해줘야 하며, 추가로 /etc/ssh/sshd-config 파일에 HostKey... 아 까먹었네 멋있게 안보고 한번에 다쓸려 했는데 ㅠㅠ


HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_dsa_key

PasswordAuthentication yes
를 설정해줘야 하며, 다른건 건드리지 않는 편이 좋다 왜냐 본인 서버 공개될수있으므로 ~

그리고 service sshd restart 해주고 

로컬에서 정상적으로 잘 되었는지 확인해주고

ssh -i /home/dohyeon/.ssh/id_rsa dohyeon@********

 

마지막으로 실제 crontab 에서 작업하려는 rsync 를 진행한다. 암호를 묻지 않으면 성공!

rsync -avz dohyeon@********:/disk1/backup-20201103.sql /backup/redmine/.

 

아래는 실제 마무리 결과이다. git 의 packfile 데이터를 포함 전체 데이터를 읽어옴을 알수있다.

                            

정상적으로 잘 동작함을 확인할 수 있다.

이제 처음에 crontab 에 설정한 자동 명령어를 마음껏 사용할 수 있다.

단, 백업시 tar 를 사용하는 경우는 원본 파일이 10GB 가 넘는다면 CPU 사용량에 주의를 해야한다. 잊지말길..

 

아래는 위의 내용을 shell script 로 짠것이다. 아래 스크립트를 crontab 에서 실행하게 하면

가독성이 좋은 시스템을 구성 할 수 있다.

#!/bin/bash

TIME=`date +%Y%m%d`
DB_PASSWD="23we23we"


#backup
echo "--------------------"
echo "mysql backup ing"
/usr/bin/mysqldump -u root --password=${DB_PASSWD} --all-databases --events > /disk1/backup-${TIME}.sql 1>/dev/null 2>/dev/null

tar zcvf /disk1/redmine-${TIME}.tar.gz /disk1/redmine/* 1>/dev/null 2> /dev/null
echo "mysql backup success"

#remote
echo "remote sync ing"
rsync -avz /disk1/redmine-${TIME}.tar.gz dohyeon@10.1.2.171:/backup/redmine/. 1>/dev/null 2>/dev/null

rsync -avz /disk1/backup-${TIME}.sql dohyeon@10.1.2.171:/backup/redmine/. 1>/dev/null 2>/dev/null
echo "remote sync success"

#delete
echo "remove ing"
rm -rf /disk1/redmine-${TIME}.tar.gz

rm -rf /disk1/backup-${TIME}.sql
echo "remove success"
echo "--------------------"
#!/bin/bash


#backup
echo "--------------------"
echo "remote sync ing..."
rsync -avzc dohyeon@10.1.2.170:/disk1/yona-1.12.0 /backup/yona/. 1>/dev/null 2>/dev/null
echo "remote sync success..."

#tar
echo "tar ing..."
tar zcvf /backup/yona/yona-`date +\%Y\%m\%d`.tar.gz /backup/yona/yona-1.12.0 1>/dev/null 2>/dev/null
echo "tar success"

#delete
echo "remove ing..."
rm -rf /backup/yona/yona-1.12.0
echo "remove success"
echo "--------------------"
반응형