scp๋ž€ ๋ฌด์—‡์ผ๊นŒ?

scp๋Š” secure copy์˜ ์•ฝ์ž๋กœ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์™€ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ํ˜ธ์ŠคํŠธ ๊ฐ„์— ํŒŒ์ผ์„ ์ „์†กํ•˜๋Š” ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค. SSH(Secure Shell)์„ ํ†ตํ•œ ํŒŒ์ผ ์ „์†ก ๋ฐฉ์‹์ด๋ฉฐ ๋ณ„๋„์˜ FTP ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ํŒŒ์ผ ์†ก์ˆ˜์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


scp ์‚ฌ์šฉ๋ฒ•

์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋จผ์ €, ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์—์„œ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ๋กœ ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ๋Š”

scp ํŒŒ์ผ๊ฒฝ๋กœ/ํŒŒ์ผ๋ช… ๊ณ„์ •๋ช…@ํƒ€๊ฒŸ์„œ๋ฒ„๋ช…:๋„์ฐฉ๊ฒฝ๋กœ/ํŒŒ์ผ๋ช…

# ์˜ˆ๋ฅผ ๋“ค์–ด, Desktop ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” test.txt ํŒŒ์ผ์„ madlife ์„œ๋ฒ„์˜ root ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด,
scp Desktop/test.txt madplay@madlife:/root # madplay๋Š” ๊ณ„์ •๋ช…

๋ฐ˜๋Œ€๋กœ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์—์„œ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ๋กœ ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ๋Š”

scp ๊ณ„์ •๋ช…@์„œ๋ฒ„๋ช…:ํŒŒ์ผ๊ฒฝ๋กœ/ํŒŒ์ผ๋ช… ๋„์ฐฉ ๋กœ์ปฌ ๊ฒฝ๋กœ

# ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์—์„œ ์˜ฎ๊ธด test.txt๋ฅผ ๋กœ์ปฌ๋กœ ์˜ฎ๊ธฐ๊ณ  ์‹ถ๋‹ค๋ฉด
scp madplay@madlife:/root/test.txt /Desktop/test.txt

scp ์˜ต์…˜์œผ๋กœ๋Š”

  • r : ํ•˜์œ„ ํด๋”๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋‘ ๋ณต์‚ฌํ•˜๋Š” Recursive
  • p : ๊ถŒํ•œ ๋ฐ ์†์„ฑ์„ ์œ ์ง€ํ•˜๋Š” Preserve
  • c : ์••์ถ•์„ ์‹ค์‹œํ•˜๋Š” Compress ์˜ต์…˜ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


rsync๋ž€ ๋ฌด์—‡์ผ๊นŒ?

rsync๋Š” remote synchronization์˜ ์•ฝ์ž๋กœ์„œ ์›๊ฒฉ์— ์žˆ๋Š” ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.


rsync ์‚ฌ์šฉ๋ฒ•

rsync๋Š” ์‚ฌ์šฉ๋ฒ•์ด ์ฐธ ๋งŽ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” โ€“daemon ์˜ต์…˜์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค. rsync ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ rsync ๊ด€๋ จ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ค๋‹ˆ๋‹ค.

vi /etc/xinetd.d/rsync

# disable์˜ ๊ฐ’์„ no๋กœ ๋ณ€๊ฒฝํ•ด ์ค๋‹ˆ๋‹ค.

# 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
}

๋‹ค์Œ์œผ๋กœ ์ ‘์† alias ๋ฐ ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

# ์•„๋ž˜ ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒˆ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

vi /etc/rsyncd.conf

[alias ์ด๋ฆ„]
path = /home/www
uid = nobody
gid = nobody
use chroot = yes
read only = false
hosts allow = ํ—ˆ์šฉ IP

# path : ์„œ๋น„์Šค ๋Œ€์ƒ ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜
# uid : ์‚ฌ์šฉ์ž์˜ id / ๊ธฐ๋ณธ๊ฐ’์€ nobody
# gid : ์‚ฌ์šฉ์ž์˜ ๊ทธ๋ฃน id / ๊ธฐ๋ณธ๊ฐ’์€ nobody
# use chroot : ์œ„์˜ path๋ฅผ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์‚ฌ์šฉ(yes)
# read only : ์ฝ๊ธฐ ์ „์šฉ(ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„์ธ ๊ฒฝ์šฐ๋Š” no๋กœ ์„ค์ •)
# hosts allow : ํ˜ธ์ŠคํŠธ๋ณ„ ์ ‘์† ํ—ˆ์šฉ ์„ค์ • / ๊ธฐ๋ณธ๊ฐ’์€ all host / ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•  IP๋ฅผ ์ ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

# comment : ํ•ด๋‹น ์„ค์ •์— ๋Œ€ํ•œ ์„ค๋ช…, ์ฝ”๋ฉ˜ํŠธ
# max connections : ๋™์‹œ ์ ‘์†์ž ์ˆ˜
# timeout : ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„ ์„ค์ • 

๋งˆ์ง€๋ง‰์œผ๋กœ xinetd๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

/etc/init.d/xinetd restart

# rsync๋Š” 873 ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ง‰ํ˜€์žˆ๋Š” ๊ฒฝ์šฐ ํ—ˆ์šฉํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€) CentOS 7 ๋ฒ„์ „ ๊ด€๋ จ

systemctl start rsyncd.service
# ์žฌ์‹œ์ž‘์€ systemctl restart rsyncd.service
# ์„œ๋ฒ„ ์žฌ๋ถ€ํŒ… ํ›„์—๋Š” systemctl enable rsyncd.service

๋‹ค์Œ์œผ๋กœ rsync ํด๋ผ์ด์–ธํŠธ ์„ค์ •์ž…๋‹ˆ๋‹ค. ๋จผ์ € rsync ์ ‘์† ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

telnet <rsync ์„œ๋ฒ„ IP > 873
# ์˜ˆ๋ฅผ ๋“ค๋ฉด, telnet xxx.xxx.xxx.xxx 873
# telnet์„ ์ด์šฉํ•˜์—ฌ 873 ํฌํŠธ๊ฐ€ ์ •์ƒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

rsync๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

rsync -avz <IP>::<์œ„์—์„œ ์ง€์ •ํ•œ alias>๊ฒฝ๋กœ ๋””๋ ‰ํ† ๋ฆฌ

#์˜ˆ๋ฅผ ๋“ค์–ด, rsync ์„œ๋ฒ„ ์„ค์ •์ด ๋œ ๊ฒƒ์„ madlife(123.123.123.123)๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ 
#madlife๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋™๊ธฐํ™” ์‹œํ‚ฌ ์„œ๋ฒ„๋ฅผ madplay๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ 
#madlife์˜ /home/www๋ฅผ madplay์˜ /home/www๋กœ ๋‚ด์šฉ์„ ๋™๊ธฐํ™” ์‹œํ‚จ๋‹ค๋ฉด

#madplay ์„œ๋ฒ„์—์„œ 
rsync -avz madlife::alias์ด๋ฆ„/home/www /home/www 
rsync -avz 123.123.123.123::alias์ด๋ฆ„/home/www /home/www

rsync ์˜ต์…˜์œผ๋กœ๋Š”

  • a : ํผ๋ฏธ์…˜ ์†Œ์œ ์ฃผ ๋ฐ ์œ„์น˜๊นŒ์ง€ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋Š” Archive
  • v : ๋™๊ธฐํ™” ์ƒ์„ธ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ณด์—ฌ์ฃผ๋Š” Verbose
  • r : ์ง€์ •ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๊นŒ์ง€ ์žฌ๊ท€์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” Recursive
  • p : ์›๋ณธ ํŒŒ์ผ ์‹œ๊ฐ„์˜ ์ˆ˜์ •์‹œ๊ฐ„, ๊ถŒํ•œ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋ณด์กดํ•˜๋Š” Perms
  • z : ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ• ์ „์†กํ•˜๋Š” Compress ์˜ต์…˜ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


scp์™€ rsync์˜ ์ฐจ์ด

์›๊ฒฉ์œผ๋กœ ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ scp์™€ rsync๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋“ค์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ์šฐ์„  rsync๋Š” scp๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค. remote-update ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ๋งŒ ๋ณต์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ง€์š”. ๊ฐ€์žฅ ์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ํŒŒ์ผ, ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•˜๊ฒ ์ง€๋งŒ ์ดํ›„๋ถ€ํ„ฐ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ๋งŒ ๋ณต์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

ํ•œํŽธ, Symbolic Link ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. scp๋Š” ์ „์†กํ•˜๋Š” ํŒŒ์ผ ์ค‘์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์žˆ์œผ๋ฉด ์ด๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ  ๋งํฌ๋œ ์›๋ณธ ํŒŒ์ผ์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.