- 1 - rsync 사용시 873 포트와 ssh 포트사용의차이? 873포트를쓴다는건받는쪽입장에서는 rsync 서버 (rsyncd, 873포트 ) 를띄워서받겠다는것이고. SSH를쓴다는건, 이전송하는부분을 ssh를통해서하는것입니다. ssh통해서하는것의이점은, 전송하는통신이 ssh의암호 / 압축등의장점을쓸수있다는장점이있습니다. 또 ssh key 인증을통한이점도있지요. 또한굳이 rsyncd를별도로띄우지않아도되지요. A.rsync 설정 (Solaris?) rsync 가사용하는프로토콜은 rsh 나 ssh 인데이것을원치않는경우는 873 포트를이용할수있습니다. rsync 가 873 포트를사용하느냐, rsh 나 ssh 를사용하느냐에따라설정내용이약간틀려집니다. 1) 873포트를사용할경우 /etc/inetd.conf(redhat7.0 이전 ) rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon --> /etc/rc.d/init.d/inetd start 서비스를 restart 해준다. or /etc/xinetd.d/rsync(redhat7.0 이후 ) 을설정 service rsync { disable = no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } --> /etc/rc.d/init.d/xinetd restart 서비스를 restart 해준다 /etc/rsyncd.conf 를만들어줍니다. [www] path = /home/www comment = webserver1 uid = nobody gid = nobody use chroot = yes read only = yes hosts allow = 192.168.10.3 max connections = 3 timeout 600 /etc/services 파일에도아래와갈은내용이없으면추가해주도록한다. phonebook 767/tcp rsync 873/tcp rsync 873/udp telnets 992/tcp
- 2-2) ssh, rsh 포트를사용하는경우 inetd 나 xinetd 를수정하지않아도되고, /etc/rsyncd.conf 를만들어주지않아도됩니다 B. rsync 실행 rsync 서버설정이된것 : webserver1(www1.linuxone.co.kr) 라고하고, 그서버로부터정보를가져와동기화시킬서버 : webserver2(www2.linuxone.co.kr) 라고가정 1) 873 포트사용시 # rsync - 옵션서버 :: 디렉토리동기화위치 가 ) webserver2 의 /home/www 로 webserver1 의 /home/www 내용을동기화시키려고한다면예 ) webserver2 에서 # rsync -avz www1.linuxone.co.kr:/home/www /home/www 나 ) webserver2 에서 webserver1 의내용을가져오면서 webserver1 에없는내용은 webserver2 에서삭제함예 ) webserver2 에서 # rsync -avz -delete www1.linuxone.co.kr::/home/www 2) ssh, rsh 사용시 클라이언트에서다음과같이사용만하면됩니다. # rsync - 옵션 -e ssh(rsh) 서버 : 디렉토리동기화위치 가 ) webserver2 의 /home/www 로 webserver1 의 /home/www 내용을동기화시키려고한다면예 ) webserver2 에서 # rsync -avz -e ssh www1.linuxone.co.kr:/home/www /home/www 나 ) ssh 를사용하려면비밀번호를입력해야하는데이것은인증키를생성해서번거로움을없앨수있습니다. ssh-keygen -d 라고하면 ~/.ssh/id_dsa.pub 라는파일이생성됨이걸원본데이터가있는서버에저장함 scp -p.ssh/id_dsa.pub root@ 호스트명 :~/.ssh/authorized_keys 라고등록하면가능합니다. - non-standard ssh port # rsync -avz -e "ssh -p $portnumber" user@remoteip:/path/to/files/ /local/path/ # rsync -rvz -e 'ssh -p 873' --progress --remove-sent-files /private_server/files/ user@office_server:/ office_server/directory # rsync -avz -e "ssh -i /home/thisuser/.ssh/thishost-rsync-key" remoteuser@remotehost:/remote/dir / this/dir/ rsync 의주요옵션 -v 진행상황을상세히보여줌 -r 지정한디렉토리의하위디렉토리까지재귀적으로실행 -l 소프트링크보존 -H 하드링크보존 -p 버전속성보존 -o 소유속성보존 ( 루트 )
- 3 - -g 그룹속성보존 -t 타임스탬프보존 -D 디바이스파일보존 ( 루트 ) -z 데이터압축전송 -u 추가된파일만전송 -b 낡은파일은 ~ 가붙음 -u 새로운파일을덮어쓰지않음 -c 서버와클라이언트파일크기를세밀히체크 -e ssh(rsh) 전송암호화 --existing : 추가된파일은전송하지않고갱신된파일만전송 --delete : 서버에없는파일은클라이언트에서도삭제 --exclude 'PATTERN' : 패턴과맞는파일만전송 --stats : 결과를보고 --daemon : 대몬모드로운영함 ( 이건 inetd.conf 에지정할때필요함 ) 참고사항 -e 옵션은 rsh나 ssh를사용할때써주는옵션입니다. 873포트를사용할때는 :: 두개를, rsh나 ssh를사용할때는 : 한개만써줍니다. rsync -avz www1.linuxone.co.kr:home/www1/ /home/www2 의내용은 www1.linuxone.co.kr의 /home/www1 안의내용을 /home/www2 디렉토리로옮기는것인데만약 /home/www1/ 라고하면원래 www1은그디렉토리자체까지포함해서가져옵니다. 그렇지만 www1 뒤에 / 가붙어서 /home/www1/ 라고표시하면그디렉토리안에있는내용만가져옵니다. 암호없이실행하기 - ssh-keygen 을이용하여공용키를생성한다. # ssh-keygen -t rsa Enter file in which to save the key (/home/.ssh/id_rsa): <enter><enter><enter> -.ssh\ 에생성된 id_rsa.pub의내용을서버의 authorized_keys에추가 # ssh-copy-id -i ~/.ssh/id_rsa.pub office-server - 접속되는지확인 # ssh userid@serverip 위작업후에도패스워드를물어보는경우확인사항 1. /etc/ssh/sshd_config 파일...( 생략 ) 26 HostKey /etc/ssh/ssh_host_rsa_key 27 HostKey /etc/ssh/ssh_host_dsa_key...( 생략 ) 64 PasswordAuthentication yes
- 4 - 위라인들에주석처리가되어있지않은지확인. 수정후엔 sshd 서비스를 restart 한다. 2. B서버의.ssh 디렉토리권한권한이 700인지확인한다. 3. /etc/ssh/ssh_host_rsa_key 파일거의발생하지않는경우. 위파일및같은경로의.pub 파일내용이 ssh-keygen 명령어로생성한파일들과같은지확인한다. ( 여러번생성한경우몇가지원인에따라다를수있으므로같도록수동으로편집 ) 4. dsa 암호화방식고려거의발생하지않는경우. OS에따라 rsa 암호화방식으로는불가능한경우가있다고한다. 출처 : http://whiterussian.tistory.com/31 [ 화이트러시안 ] crontab 에다음과같이등록하면더욱좋습니다. rsync -avpz --delete --stats -l -t -e ssh root@webserver1:/home/ /backup - 저렇게할경우압축을하고, 퍼미션및소유권은그대로유지하며, 심벌릭링크는심벌릭링크그대로백업하고, 전송속도및시간을출력해주고, 마지막에전송된상태를출력해줌. --delete 는옵션은원본에는없지만그전에받은백업본에있을경우삭제해줌. 그래서, 원본과항상똑같이백업이되도록함 참조 : http://dev.jpblog.co.kr/21 실제사례 : vmware CentOS1:jesu(rsync daemon) <--- CentOS2:paul 1. paul에서 - ssh-keygen -t rsa - ssh-copy-id -i jesu@centos1 --> 결과 : CentOS1:.ssh/authorized_keys CentOS2: id_rsa id_rsa.pub known_hosts 이생성됨 2. paul에서 [paul@localhost ~]$ rsync -av./te* jesukero@192.168.44.101::tmp rsync: failed to connect to 192.168.44.101 (192.168.44.101): No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(122) [sender=3.0.9]
- 5 - [paul@localhost ~]$ rsync -av./te* jesukero@192.168.44.101:/tmp sending incremental file list test1 test2 test3 sent 308 bytes received 69 bytes 251.33 bytes/sec total size is 114 speedup is 0.30 [paul@localhost ~]$ rsync -av./te* jesukero@192.168.44.101:tmp sending incremental file list test2 test3 sent 233 bytes received 56 bytes 192.67 bytes/sec total size is 114 speedup is 0.39 [paul@localhost ~]$ --> 결과 : 1) rsync -av./te* jesukero@192.168.44.101::tmp : Error 2) rsync -av./te* jesukero@192.168.44.101:/tmp jesu... 서버의 /tmp에파일생성됨 3) rsync -av./te* jesukero@192.168.44.101:tmp jesu... 서버의 rsyncd.conf에정의된 [tmp] 가지정한 /tmp 즉 jesu.. 의 ~/tmp에파일생성됨 -- id_rsa와 id_rsa.pub는쌍이며 id_rsa.pub의내용은상대방authorized_keys에있어야한다. known_hosts가없으면처음 1회생성여부를물어봄.