10개의 서버(www1 ~ 10)를 동기화 시켜야 한다고 가정한다.
동기화 시킬 메인 서버를 www1, 나머지 클라이언트 www2 ~ 10
테스트 환경 :
Linux 2.2.x ~ 2.4.x
OpenSSH_3.1p1
rsync-2.5.4-2
메인서버 www1의 rsync 설정 파일을 편집한다.
# vi /etc/rsyncd.conf
[sync]
path = /www/htdocs/sync
comment = syncdata
uid = nobody
gid = nobody
use chroot = yes
read only = yes
hosts allow = www2 www3 www4 www5 www6 www7 www8 www9 www10
timeout 100
서버쪽 설정끝
클라이언트별로 ssh 인증키를 발급해서 www1에 전송한다.
$ ssh-keygen -d
로컬서버(id_dsa)와 원격서버(id_dsa.pub)의 인증키값 쌍을 생성한다.
이때, 비번을 물어보는데 rsync로 접속할때 비번없이 접속하기 위해 그냥 Enter를 친다.
생성한 원격인증키를 서버에 전송한다.
$ scp -p ~/.ssh/id_dsa.pub myid@www1:~/.ssh/authorized_keys2
비번을 물어보면 정확하게 입력한다.
참고로, 서버와 클라이언트에는 같은 사용자아이디/비번이 존재해야 한다.
### 주의사항 ###
예를들어, www2번에서 인증키를 생성한 다음 scp로 원격 copy 하면 www1에 ~/.ssh/authorized_keys2 파일이 생성된다.
www3 번 역시 ssh-keygen 으로 키값을 생성해서 scp로 전송하면 www2의 ssh 접속에 비번을 물어보게 된다.
왜냐하면, scp 명령으로 기존에 만들어졌던 authorized_keys2 파일을 덮어 씌워버리기 때문..
이 부분에서 삽질 좀 했음...
google 에서도 명쾌한 답이 나오지 않아 모든 호스트들의 ssh 접속 키값만 생성한 다음 서버의 authorized_keys2 에 직접 복사를 해줌.
단, 하나의 인증키값은 하나의 행이어야 함(LF,CR 없음) - 복사시 신중을 기해야...
모든 작업이 끝나면 테스트를 해본다.
$ hostname
www6
$ rsync -avz -e ssh www1:/www/htdocs/sync/ /www/htdocs/sync
크론으로 돌리면 자동 네트웍 동기화가 이루어 진다.

댓글을 달아 주세요