Linux OS/관리

rsync, scp 사용법 (원격 파일,소스보내기)

서버엔지니어 2023. 3. 12.
728x90

rsync : Remote Sync의 줄임말로 여러가지 옵션을 이용해 원격 또는 로컬에 파일을 복사하는 툴입니다.

 

rcp 그리고 scp와 같이 원격에 파일을 복사할 때 사용하는 기본 내장 명령어입니다. 원격 컴퓨터에 파일을 전달할 수 있을뿐만 아니라 로컬에 있는 파일로 복사도 가능합니다.

옵션이 정말 다양하게 많으며 많은 옵션들을 이용해 다양한 기능들을 활용할 수 있습니다.(symlink 유지, 권한 유지 그리고 파일 날짜 유지와 같은 기능들)
==============================================================
rsync yum 설치

yum 설치시
# rpm -qa | grep rsync 로 설치 확인이 가능합니다.
설치가 되어있지 않다면 다음과 같이 rsync 설치를 진행합니다.


# yum install -y rsync
설치를 확인합니다.


# rpm -qa | grep rsync
최신버전으로 설치를 원할 경우 다음과 같이 진행합니다

# wget pkgs.repoforge.org/rsync/rsync-3.1.1-1.el6.rfx.x86_64.rpm
 ※ 최신버전 설치시 http://pkgs.repoforge.org/rsync/ 에서 다운로드가 가능하며 최신버전은 3.1.1 버전입니다.
해당 패키지를 업그레이드합니다.

# rpm -Uvh rsync-3.1.1-1.el6.rfx.x86_64.rpm
rsync-3.1.1 버전이 정상적으로 설치되었나 확인합니다.

# rpm -qa | grep rsync

==============================================================
rsync 설정

방화벽에 접근 후 rsync 데몬이 사용하는 873 포트를 오픈해줍니다.
iptables -nL | grep 873

 ※ rsync 포트는 /etc/services 에서 873 으로 설정되어있으며 변경이 가능합니다.

vi /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 873 -j ACCEPT

/etc/init.d/iptables restart
iptables -nL | grep 873
==============================================================

vi /etc/xinetd.d/rsync

disable = yes
→ Line 5 번줄의 disables = yes 를 no 로 변경합니다.

# vi /etc/rsyncd.conf

[test] ; 사용할 rsync 서비스 이름
path =/home/test/ ; 데이터 원본 경로
comment = this is rsync testing ; 코멘트
uid = nobody ; 권한 사용자
gid = nobody ; 권한 그룹
use chroot = yes ; chroot 사용여부
read only = yes ; ※ 클라이언트에서 서버로 올리는 경우엔 no 로 설정
hosts allow = xxx.xxx.xxx.xxx ; rsnyc 클라이언트 IP 설정, local 이용시 입력할필요 x
max connections = 3 ; 최대 연결 수
timeout = 600
==============================================================
service xinetd restart 또는 # /etc/init.d/xinetd restart 
==============================================================

rsync 작동 테스트
# rsync -v localhost::
rsyncd.conf 에서 설정했던 서비스 이름 및 코멘트 확인이 가능합니다.

test                  this is rsync testing
==============================================================
rsync source 설치 

cd /usr/local/src 
wget https://rsync.samba.org/ftp/rsync/rsync-3.1.2.tar.gz 
tar zxvf rsync-3.1.2.tar.gz # cd rsync-3.1.2 
yum install -y gcc gcc-++ 
./configure --prefix=/usr/local/rsync ; 설치 경로 
make && make install 
make 시 perl 과 관련된 에러가 출력된다면
yum install -y perl 후에 다시 진행합니다.
==============================================================
rsync source 설정


컴파일시 prefix 옵션을 주지 않으면 기본적으로 /usr/local/bin/rsync 에 설치가 되는데
메뉴얼 작성시에는 prefix=/usr/local/rsync 에 두었기때문에 /usr/local/rsync 하위에 etc,log 디렉토리를 만들어줍니다.

mkdir /usr/local/rsync/{log,etc}
rsync log 확인을 위한 설정을 진행합니다.

echo “local3.info /usr/local/rsync/log/rsync.log” >> /etc/syslog.conf
touch /usr/local/rsync/log/rsync.log
==============================================================

vi /usr/local/rsync/etc/rsyncd.conf
==============================================================

motd file = /usr/local/rsync/etc/motd ; 테스트시 출력하는 파일//기본적으로 없는파일이며 만들필요 x
log file = /usr/local/rsync/log/rsyncd.log ; log file 의 위치
pid file = /usr/local/rsync/etc/rsyncd.pid ; pid 파일 위치
max connections = 0 ; 동시접속자 수 (0=unlimited)
syslog facility = local3

[web] ; 서비스명
path = /usr/local/apache/htdocs ; 서비스할 디렉토리
comment = apache_web from 56.101 ; 서비스에 대한 설명
uid = nobody ; 파일전송하는 사용자의 id, 기본값 nobody
gid = nobody ; 파일전송하는 사용자의 gid, 기본값 nobody
use chroot = yes ; 디렉토리 위치를 root 디렉토리로 사용.(보안상 yes)
read only = yes ; 읽기전용,(클라이언트에서 서버로 데이타를 올릴경우 yes)
hosts allow = 192.168.56.102 ; 호스트별 접속허용 // hosts deny 도 가능
max connections = 3 ; 동시 접속자수
timeout 600 ; timeout 시간

 

                 ※ auth user = 의 옵션을 통해 사용자 지정이 가능함(sshd allowusers 와 비슷)
                 ※ secrets file = /usr/local/rsync/etc/rsyncd.secrets 파일에 허용유저:패스워드를 기입

 

[ftp]
comment = ftp_area from 56.101
path = /home/test01
read only = yes
list = yes ; 클라이언트가 모듈들의 리스트를 요청했을시 출력허용.
uid = nobody
gid = nobody
==============================================================
rsync path 설정 및 데몬을 구동합니다


vi ~/.bash_profile
PATH=$PATH:/usr/local/rsync/bin/:
source ~/.bash_profile

 

rsnyc 데몬을 구동시 사용할 rsyncd.conf 파일을 입력합니다

rsync --daemon --config=/usr/local/rsync/etc/rsyncd.conf

netstat -nltp | grep rsync
다음의 명령어를 통해 rsyncd.conf 에서 설정한 서비스를 확인합니다.

rsync -v localhost::
this is rsync_testing server 192.168.100.100
web                                apache_web from 100.100
ftp                                   ftp_area from 100.100
==============================================================

rsync 사용법
rsync 사용시 rsyncd.conf 에서 설정한 서비스를 이용하지 않고 ssh 를 이용한 접근도 가능합니다.

원격지에서 Rsyncd.conf 에서 설정한 서비스 이용방법
사용시 hosts allow 에 호스트가 등록이 되어있어야합니다.
다음과 같은 명령어를 통해 설정한 서비스명(디렉토리) 하위 데이타를 받을 수 있습니다.

 

rsync -avzPog xxx.xxx.xxx.xxx(rsync 를 설정한서버)::ftp(서비스명) /usr/local/src(받을경로)

 

rsyncd.conf 에 서비스 등록시 read only = no 로 진행했다면 업로드도 가능합니다.

 

rsync -avzPog /usr/local/src(업로드할 파일) xxx.xxx.xxx.xxx::ftp(업로드할 경로)
 원격지의 접속정보를 알고 있는 경우 ssh 를 이용한 rsync 사용법

 

rsnyc -avzPog -e ssh xxx.xxx.xxx.xxx:/usr/local/apache/htdocs(받을파일 또는 폴더위치) /usr/local/src(받을경로)
위와 같은 명령어를 이용시 설정한 서비스명이 아닌 어떤 곳의 파일이라도 내려받기가 가능합니다.

 

ssh 가 기본포트(22)가 아닐경우

rsnyc -avzPog -e "ssh -p 포트번호" xxx.xxx.xxx.xxx:/usr/local/apache/htdocs /usr/local/src
다음과 같은 방법도 ssh 를 이용하는 방법입니다.

 

rsync -avzPog root@xxx.xxx.xxx.xxx:/usr/local/apache/htdocs(받을파일 또는 폴더위치) /usr/local/src(받을경로)
반대로 원격지에 데이타를 올릴경우는 다음과 같은 명령어를 이용합니다.

 

rsnyc -avzPog /usr/local/src(업로드할 파일) xxx.xxx.xxx.xxx:/usr/local/apache/htdocs(업로드할 경로)
※ ssh 를 이용시 /etc/xinetd.d/rsync 를 수정하거나 rsyncd.conf 파일을 만들필요가 없습니다
==============================================================
rsync [options ...] [source] [target]


-v : verbosity를 높이는 옵션으로 복사하는 과정을 더 자세하게 보여줍니다.
-z : compress를 주는 옵션으로 파일을 복사할 때 압축해서 복사합니다. 파일을 압축합니다.(동일 시스템에서 복사할때는 오히려 속도가 떨어지므로 사용하지 않는것이 좋습니다.)
-h : 사람이 읽기 쉬운 형태로 복사 결과들을 출력해줍니다.
-a (same as -rlptgoD) : archive 모드로 -rlptgoD 옵션을 적용한것과 같습니다. 해당 옵션들은 아래서 설명하며 symlink, 권한 그리고 timestamp와 같은 속성들을 그대로 복사합는 옵션입니다.
-r : 디렉토리를 복사할 때 사용하는 옵션입니다. 하위 디렉토리까지 포함합니다.
-l : symlink는 symlink 형태로 복사,보존하는 옵션입니다.
-p : 파일과 디렉토리들의 권한을 유지하는 옵션입니다.
-t : 수정시간을 유지하는 옵션입니다.
-g : 그룹 속성을 유지하는 옵션입니다.
-o : 소유자 속성을 유지하는 옵션입니다.
-a : 아카이브 모드, 심볼릭 링크, 속성, 퍼미션, 소유권 등을 보존합니다.
-q : -v 의 반대로 진행사항을 보여주지 않습니다.
-R : 상대 경로를 사용합니다.
-b : 백업을 진행합니다.
-H : 하드링크를 보존합니다.
-u : 업데이트된 파일만 전송합니다.(새로운 파일을 덮어쓰지 않음)
-c : 항상 파일을 체크합니다.
-e ssh(rsh) : ssh 를 사용합니다.
-D (same as --devices --specials) : --devices --specials)의 옵션과 같습니다.
--devices : root 권한이 필요하며 Device 관련된 파일들을 복사해서 생성해줍니다.
--specials : named socket이나 fifo와 같은 특수한 파일들도 복사하는 옵션입니다.
--existing : 추가된 파일은 전송하지않고 갱신된 파일만 전송합니다.
--delete : 서버에 없는 파일은 클라이언트에서도 삭제합니다.
--exclude '패턴' : 패턴과 맞는 파일만 전송합니다.
--stats : 전송 결과를 보고합니다.

로컬 폴더 복사
# rsync [File Name] [Target Path]
rsync -avzh test_file.txt /tmp

# rsync [Directory Name] [Target Path]
rsync -avzh test_directory /tmp

# 폴더 내 모든 파일들 복사
# rsync [Directory Name]/ [Target Path]
rsync -avzh test_directory/ /tmp

원격 파일 복사
# rsync [File Name] [User]@[IP Address]:[Path]
rsync -avzh test.txt twpower-private-server:~
rsync -avzh test.txt twpower@192.168.1.2:~


# rsync [Directory Name] [User]@[IP Address]:[Path]
rsync -avzh test.txt twpower-private-server:~
rsync -avzh test.txt twpower@192.168.1.2:~

# 폴더 내 모든 파일들 복사
# rsync [Directory Name]/ [User]@[IP Address]:[Path]
rsync -avzh test_directory/ twpower-private-server:~
rsync -avzh test_directory/ twpower@192.168.1.2:~
==============================================================
scp 명령어
기본
scp : secure copy (remote file copy program)의 줄임말로 ssh를 이용해 네트워크로 연결된 호스트간에 파일을 주고 받는 명령어입니다.
로컬 -> 리모트 (보내기), 리모트 -> 로컬 (가져오기)와 리모트 -> 리모트 (다른 호스트끼리 전송) 로 복사가 모두 가능합니다.
ssh를 이용하기 때문에 password를 입력하거나 ssh 키파일과 같은 identity file을 이용해 파일 송수신이 가능합니다.

기본 사용 문법
manual page에 있는 자료
==============================================================
scp [options ...] [source] [target]
기본 형태
# Local -> Remote
scp 목적파일명(경로) 유저명@IP주소:목적디렉토리

# Remote -> Local
scp 유저명@IP주소:파일디렉토리 목적파일명(경로)

 

# Remote(source) -> Remote(target)
scp 유저명@IP주소:파일디렉토리 유저명@IP주소:파일디렉토리
==============================================================

 

옵션

-r : 재귀적으로 모든 폴더들을 복사합니다. 폴더를 복사할 때 사용하는 옵션으로 이때 전송하고자 하는 대상은 폴더로 지정하면 됩니다. 아래에 예제를 참고하시면 됩니다. symbolic link가 있는 경우에는 target에 symbolic link를 생성하지 않고 symbolic link가 가리키는 파일 혹은 폴더를 복사합니다.
-P : ssh 포트를 지정하는 옵션
-i : ssh 키파일과 같은 identity file의 경로를 지정하는 옵션
-v : verbose 모드로 상세내용을 보며 디버깅을 할 때 사용합니다.
-p : 파일의 수정 시간과 권한을 유지합니다.
==============================================================

예제
로컬 -> 리모트
패스워드 사용하는 경우
scp ~/test.txt twpower@[IP주소]:/home/twpower

-i 옵션
identity file을 지정해서 사용할 때
scp -i ~/.ssh/twpower-private-server ~/test.txt twpower@[IP주소]:/home/twpower

-r 옵션
폴더를 복사하는 경우
scp -r ~/test_folder/ twpower@[IP주소]:/home/twpower

-P 옵션
scp -P 22 ~/test.txt twpower@[IP주소]:/home/twpower

==============================================================

리모트 -> 로컬
패스워드 사용하는 경우
scp twpower@[IP주소]:/home/twpower/test.txt /Users/taewoo

-i 옵션
identity file을 지정해서 사용할 때
scp -i ~/.ssh/twpower-private-server twpower@[IP주소]:/home/twpower/test.txt /Users/taewoo

-r 옵션
폴더를 복사하는 경우
scp -r twpower@[IP주소]:/home/twpower/test_folder /Users/taewoo

-P 옵션
scp -P 22 twpower@[IP주소]:/home/twpower/test.txt /Users/taewoo

'Linux OS > 관리' 카테고리의 다른 글

vncserver 서비스 데몬 만들기  (0) 2023.03.12
crontab  (0) 2023.03.12
log 관리하기 (rsyslog)  (0) 2023.03.12
openssl 버전(CentOS)과 웹브라우저 tls 정책  (0) 2023.03.02
FTP 설치, 설정, 관리  (0) 2022.11.16

댓글