You cannot see this page without javascript.

진주성 블로그 방문하기

[ssh 인증키를 이용한 rsync 백업하기]

일반적인 rsync 를 이용할 경우 포트 873 포트를 이용하여 파일 전송을 하게 된다.

TCP 포트를 사용하게 되므로 포트스캔으로 IPS 장비에 의해 탐지될수도 있고

패킷을 분석하게 되면 파일명이나 내용이 보일수 있기에 보안에 취약하다

SSH 를 이용하게 되면 기본포트나 포트 변경을 하더라도 원격 접속용이기 때문에

접속에 대해서는 프리하게 사용할수 있고 ssh 자체 암호화 기능이 있으므로 패킷분석에 발견될

우려는 극히 드물다

 

- 사전 작업

0) 소스 및 타겟서버(HP-UX 11.31 기준)rysnc 설치

- 설치파일명 : ixRsync_ixRsync_A.20.00-3.0.9.001_HP-UX_B.11.23_IA_PA.depot (HP-UX 11.23)

- 설치파일명 : ixRsync_ixRsync_A.20.00-3.0.9.001_HP-UX_B.11.31_IA_PA.depot (HP-UX 11.31)

다운로드 :

ixRsync_ixRsync_A.20.00-3.0.9.001_HP-UX_B.11.23_IA_PA.depot

ixRsync_ixRsync_A.20.00-3.0.9.001_HP-UX_B.11.31_IA_PA.depot

 

# LANG=C

# swinstall -s /tmp/ixRsync_ixRsync_A.20.00-3.0.9.001_HP-UX_B.11.31_IA_PA.depot

 

# swlist |grep -i rsync (swlist로 확인)

ixRsync A.20.00-3.0.9.001 File Transfer Program

 

## cs1 서버에서 cs3 서버 데이터를 동기화하기##

- cs1 서버(172.16.170.6) : target data

- cs3 서버(172.16.170.10): source data

 

 

1) 공개키 생성

cs1서버에서 ssh 인증키 생성

(개인키를 가진쪽이 공개키를 가진쪽으로 접속한다.

, cs1에서 cs3으로 공개키를 이용하여 passwd 없이 접속한다)

 

root@cs1 [/]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Please be patient.... Key generation may take a few minutes

Enter file in which to save the key (//.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in //.ssh/id_rsa.

Your public key has been saved in //.ssh/id_rsa.pub.

The key fingerprint is:

06:2f:28:b6:d6:27:b0:24:94:90:73:4f:46:8b:2c:66 root@cs1

The key's randomart image is:

+--[ RSA 2048]----+

|.. .. |

|+.o.o. |

|.Eo+. . |

|+. .. o |

|. = . . S |

| + * o |

| + o . |

| . o |

| |

+-----------------+

root@cs1 [/]#

## 패스워드를 입력하지 않았다. /.ssh/id_rsa.pub 파일이 공개키이며, 접속하려는 서버에 심어 두어야 한다

 

root@cs1 [/]# cd /.ssh

root@cs1 [/.ssh]# ll

total 48

-rw------- 1 root sys 1675 Jul 3 11:07 id_rsa

-rw-r--r-- 1 root sys 390 Jul 3 11:07 id_rsa.pub

-rw-r--r-- 1 root sys 888 Jul 3 10:36 known_hosts

 

2) 공개키를 cs3서버의 /.ssh/authorized_keys 에 넣는다

(cs1서버의 /.ssh/id_rad.pub 파일을 ftpcs3서버의 //.ssh/에 넘긴 후 autorized_keyrename

또는 id_rad.pub파일 내용을 copycs3서버에서 viautorized_key파일 생성후 paste해도 됨)

** autorized_key파일의 퍼미션을 600으로 변경한다.

 

# cd /.ssh

# chmod 600 autorized_key (퍼미션 600으로 변경)

root@cs3[/.ssh]#ll authorized_keys (퍼미션 확인: 600)

total 32

-rw------- 1 root sys 390 Jul 3 10:06 authorized_keys

 

 

3) cs1 서버에서 cs3서버로 접속테스트

# ssh -i /.ssh/id_rsa 172.16.170.10

또는 ssh -i /.ssh/id_rsa cs3 (/etc/hosts 파일에 해당 IP 등록 되있을경우)

=> password 확인 없이 cs3서버로 로그인된다.

 

 

4) rsync 명령 실행

*** 단순동기화(cs3: 원본, cs1: 사본) ***

root@cs1 [/]# rsync -avz -e ssh 172.16.170.10:/tmp/rsync_source/ /tmp/rsync_target

또는

root@cs1 [/]# rsync -avz -e ssh cs3:/tmp/rsync_source/ /tmp/rsync_target

(cs3 서버의 /tmp/rsync_sourcecs1 서버의 /tmp/rsync_target으로 동기화)

 

*** 동기화(삭제파일도 동일적용) ***

root@cs1 [/]# rsync -avz --delete -e ssh 172.16.170.10:/tmp/rsync_source/ /tmp/rsync_target

 

*** 2번에서 공개키 생성을 하지 않은 상황에서 계정의 접속 비번을 입력해주면 파일 전송이 가능하다

root@cs1 [/]# rsync -avz user@172.16.170.10:/tmp/rsync_source/ /tmp/rsync_target

(해당 유져의 패스워드를 입력하면 파일전송이 시작된다. 당연 목적지 파일 디렉토리 쓰기 퍼미션이 있어야 된다)

 

5) cron에 등록하여 매일 세벽 3시에 백업 수행할 경우

---------------------------------------------------------------------------------------

vi rsync_backup.sh

#!/bin/sh

/usr/bin/rsync -avz -e ssh 172.16.170.10:/tmp/rsync_source/ /tmp/rsync_target

---------------------------------------------------------------------------------------

 

 

# crontab -e

00 03 * * * /bin/sh /root/backup/rsync_backup.sh > /dev/null 2>&1

 

6) rsyncd.conf 설정에 의한 서비스 데몬 실행

 

위 4번의 방법으로 안될경우 고전적인 방법으로 rsyncd 를 기동하여 파일 주고 받고를 할수 있다

먼저 /etc/rsyncd.conf 의 내용을 추가 수정한다. 포트는 873을 사용하므로 방화벽은 오픈되어 있어야 된다.

앞에도 언급 했듯이 보안상 좋지 않은 설정 이므로 아래 환경 파일에 필히 "hosts allow " 에 접속하는 서버를

등록해 줘야 된다.

임시 용도로 사용한뒤 데몬프로세서를 죽여 놓는게 좋을듯 하다

 

root@cs1 [/]# vi /etc/rsyncd.conf

syslog facility = local5
uid = root
gid = root
##############################################################
[R]
        comment = root directory
        path = /
        hosts allow = cs1, cs2, cs3
        read only = no
        timeout = 600

 

 

그리고 데몬을 실행 한다.

 

root@cs1 [/]# rsync --daemon

 

그러면 프로세서가 수행 되면서 접속 대기를 합니다.

 

클라이언터쪽 파일 백업받을 서버에서 아래와 같이 수행합니다.

 

root@cs1 [/]# rsync -avz  /tmp/rsync_source cs3::R/tmp/rsync_target

 

리눅스에는 기본적으로 설치 되어 있는 툴 이므로 자유롭게 사용 가능하다

 

진주성 블로그 방문하기
CLOSE