Tag Archives: rsync

scp, ssh, rsync등을 사용할때에 SSH 비밀번호 묻는것 피하기

파일을 복사하기 위해 scp를 사용할때 비밀번호를 물어오게 됩니다. 또한 ssh를 통한 rsync를 사용할때에도 해당 서버의 계정과 비밀번호를 알고 있어야 사용할 수 있습니다. expect라는 명령을 사용하여 자동로그인 스크립트를 개발할 수도 있습니다만 가장 일반적으로 사용하는 공개키/비밀키 조합을 이용하는 방법을 정리해 보겠습니다.

1. 사용자가 scp/ssh/rsync등의 명령을 실행하기 위한 호스트에서 다음과 같은 방법으로 키를 발급합니다.

$ ssh-keygen -t rsa

위의 명령을 사용할 시 passphrase들을 물어오게 됩니다. 3번정도 물어오는데 이때에 모두 그냥 엔터를 치시면 됩니다. 실행이 정상적으로 된다면 비밀키와 공개키 한쌍이 생성됩니다. 변경을 하지 않았다면 기본적으로 ~/.ssh/id_rsa.pub 에 공개키가 저장됩니다.

2. 위에서 만들어진 id_rsa.pub파일을 ftp, scp, rsync, rz등 무엇을 사용해도 상관없으니 어디가로 다운받아놓도록 합시다.

3. 이제 scp/ssh/rsync를 통한 원격 접속을 하기 위한 호스트로 접속을 합니다.

4. 아까 다운받아두었던 id_rsa.pub파일을 ~/.ssh/authorized_keys로 바꿔 업로드 또는 추가 합니다.

$ cat id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh/authorized_keys

그냥 손쉽게 mv, cp를 사용하지 않고 cat을 사용하는 이유는 이미 authorized_keys가 존재할 경우 새로운 키를 단순히 추가하기 위함입니다. 위와같이 리다이렉트(append: >>)를 사용할 경우 파일이 존재한다면 덧붙이기를 하게 되고 파일이 없을 경우 새로 생성하게 됩니다. 또한 여기서 권한을 주는 것은 매우 중요하니 chmod를 하는것을 잊지 말도록 합시다.

5. ssh는 기본적으로 root 로그인을 허용하지 않고 있습니다. root 로그인을 해야 하는 상황일 경우 /etc/ssh/sshd_config 파일을 수정하도록 합니다. 기본적으로 no로 되어있습니다.

PermitRootLogin yes

위의 설정은 root를 사용하기 위한 설정이며 꼭 필요한 경우가 아닐 경우 보안상 설정을 피하는것이 좋습니다.

rsync 사용 하기

rsync를 사용하면 손쉽게 데이터 미러링을 할 수 있습니다. 또한 증분 백업이 가능한 백업 시스템을 구축 할 수 있으며, 다수의 웹서버를 사용할 경우 웹페이지 배포등에 활용할 수 있습니다.

저는 백업 용도로 구성을 한번 해보겠습니다.

사용자 삽입 이미지위와 같이 파일 서버가 2대가 있고 그 정보를 백업할려는 백업 서버가 있습니다. 파일 서버에는 rsync 데몬을 실행하고 백업 서버에서는 rsync 명령으로 데이터를 끌어가면 됩니다.

FILE SERVER #1(192.168.0.1) ————————————————————————————
rsync는 xinetd 슈퍼 데몬에 얹혀 돌아갑니다. 데몬모드로 실행하기 위해 설정을 바꿔 봅시다.

$ vi /etc/xinetd.d/rsync

# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#   allows crc checksumming etc.
service rsync
{
    disable = no
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon
    log_on_failure  += USERID
}

disable을 no로 바꾼후에 xinetd를 재시작 해줍니다.

$ service xinetd restart
xinetd 를 정지 중:                                        [  OK  ]
xinetd (을)를 시작 중:                                    [  OK  ]

nmap을 실행해 정상적으로 873번 포트가 떠있는지 확인해 봅시다.

$ nmap localhost

Starting Nmap 4.99 ( http://www.insecure.org/nmap/ ) at 2008-05-20 13:05 KST
Interesting ports on Theeye (127.0.0.1):
Not shown: 1672 closed ports
PORT     STATE SERVICE
873/tcp  open  rsync

Nmap finished: 1 IP address (1 host up) scanned in 0.105 seconds

/etc/rsyncd.conf 파일을 만들어 줍시다.

[file]
path = /home/file
comment = File server #1
uid = nobody
gid = nobody
use chroot = yes
read only = yes
host allow = 192.168.0.3
max connection = 1
timeout 300

첫번째 줄의 []로 감싸여 있는 값은 해당 설정의 이름입니다. 이 이름으로 다른 서버에서 데이터를 끌어올 수 있습니다.

path : 공유할 디렉토리
comment : 설명
uid : 접근할 user id
gid : 접근할 group id
use chroot : chroot를 사용할지 여부, 특별한 이유가 없는 이상 꼭 사용할 것
read only : 읽기만 가능할 것인지, 백업의 피 대상이므로 yes로 설정
host allow : 접근 가능한 호스트 설정. 백업서버만 접근 가능하도록 설정
max connection : 최대 몇개의 커넥션을 연결할 수 있는지 설정
timeout : 타임아웃 시간 설정

FILE SERVER #2 (192.168.0.2) ————————————————————————————–
당연하게도 FILE SERVER #1과 모든 설정이 동일합니다. 그래도 rsyncd.conf 파일의 comment값만 좀 조정해 볼까요?;;

[file]
path = /home/file
comment = File server #2
uid = nobody
gid = nobody
use chroot = yes
read only = yes
host allow = 192.168.0.3
max connection = 1
timeout 300

BACKUP SERVER (192.168.0.3) ————————————————————————————-
백업 서버에서는 안타깝게도 그다지 설정할 것이 없습니다. 데이터를 끌어와 봅시다.

$ rsync -avz 192.168.0.1::file /home/backup/file1
$ rsync -avz 192.168.0.2::file /home/backup/file2

보시다 시피 위에서 지정한 file이라는 공유 이름으로 데이터를 가져오게 됩니다. 다시 한번 실행해 보면 변동된 데이터만 가져오게 됩니다.