본문 바로가기
컴퓨터/Linux

ssh와 rsync를 이용한 백업

by 신규하 2012. 3. 22.

리눅스 시스템 사이에서 백업을 해야 할일이 생겨서 이것저것 찾아 보다가..
rsync를 사용하기로 했습니다.

우선 ssh를 통해서 rsync 백업을 할려고 하면, password를 묻습니다.
한번씩 할 때는 패스워드를 치면 상관없지만, crontab을 사용해서 주기적으로 할려고 하면 문제가 발생합니다.

해결하는 방법을 이것저것 찾았는데 2가지 정도가 나오네요.

첫번째는 ssh-keygen을 통해서 패스워드를 묻지 않게 하는 방법 입니다.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/finetech/.ssh/id_rsa):
/home/finetech/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/finetech/.ssh/id_rsa.
Your public key has been saved in /home/finetech/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:uiPSOlmCY5miRfqfxlBYa40WelCR3pFWjwYDm0j318I finetech@finetech
The key's randomart image is:
+---[RSA 2048]----+
|  ..=+oo.        |
| ..o++++ +       |
|  .*oB..E o      |
|  + O oo .       |
| +o=    S        |
|=++ .  .         |
|++ B  .          |
|. = =...         |
|  .*o...         |
+----[SHA256]-----+
$ cat ~/.ssh/id_rsa.pub | ssh [원격ID]@[원격HOST] "cat >> .ssh/authorized_keys"
password: 암호입력<ENTER>

이렇게 설정을 해 두면, 해당 원격 서버에 접속할때 암호를 전혀 묻지 않게 됩니다.

$ rsync -avz --delete -e ssh [원격HOST]:/home/source /home/target

이런식으로 백업 하시면 됩니다.

하지만, 뭔가 찝찔하죠..
누구나 이 자리에 앉으면 패스워드를 몰라도 원격 호스트에 접근을 할 수 있게 되죠…

접근이 안 된다면, 서버에 접속해서, .ssh/authorized_keys 의 퍼미션을 600 으로 수정해 줍니다.


$ ssh [원격ID]@[원격HOST]

$ chmod 600 ~/.ssh/authorized_keys

두번째는 sshpass를 사용해서 접근하는 방법니다.

CentOS나 fedora에서는 기본 yum해서는 들어 있지 않습니다.
아래와 같이 epel을 통해서 받습니다.


$ sudo su -

$ rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm

$ yum update

$ yum -y install sshpass

이렇게 설치해 주시면 됩니다.
Ubuntu를 쓰시는 분들은 apt-get으로 받으세요.

$ sudo apt-get install sshpass

sshpass을 사용법을 알아보면.. 아래와 같습니다.

sshpass -p ‘[암호]’ ssh [원격ID]@[원격HOST]

$ sshpass -p 'myPassword' ssh username@server.example.com

이런식이죠…

그러면, 이걸로 rsync를 해 봐야 겠죠?

$ rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/

이렇게 하시면 됩니다.

참 쉽죠?

여기서 주기적으로 백업을 하고 싶다면..

$ crontab -e

이렇게 뛰우시고 내용을 수정하시면 됩니다.

*/5 * * * * rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/

이렇게 해 두면 5분 주기로 백업이 진행 됩니다.

하지만, 이건 더욱 찝찝합니다. 패스워드가 코드에 들어가 있으니 -_-;;
잘 고민해서 사용하세요..
그래도 한다면.. 1번이 조금 괜찮을 듯…


댓글