[bash: expect] rsync 자동 원격 백업 리눅스 bash script

expect 스크립트를 이용하면 rsync 원격 백업을 자동화할 수 있다. 이 방법은 예전에 올렸던 ssh 자동 접속 방법과 같은 맥락이다. rsync에 대한 내용은 이전 게시물을 참고하자. 여기로

스크립트 이름은 auto_rsync.exp로 하고, 인자(argument)는 원천(source) 디렉토리, 원격주소, 백업 디렉토리, ssh 접속암호 순서로 지정한다고 하자. 예를 들어 /home/john/my_dir 디렉토리를 192.168.0.10의 john 계정에 있는 /home/john/my_backup 디렉토리로 백업한다고 하면 아래와 같이 실행하게 될 것이다. 접속암호는 my_password라고 가정하자.

expect -f auto_rsync.exp /home/john/my_dir john@192.168.0.10 /home/john/my_backup my_password

auto_rsync.exp 스크립트는 아래와 같이 구성할 수 있다.

# auto_rsync.exp
# 변수 할당
set src_dir [lindex $argv 0]
set remote_host [lindex $argv 1]
set dst_dir [lindex $argv 2]
set password [lindex $argv 3]

# rsync 실행
spawn rsync -r -v -z -u "$src_dir" "$remote_host:$dst_dir"
# 암호 입력 메세지 기다림
expect -nocase "password"
# 암호 전송
send "$password\r"
# 이후 작업 권한을 사용자에게 넘김
interact

위 스크립트가 동작하는 과정을 간단하게 설명하자면 아래와 같다.

우선 각 인자를 변수에 할당한다(set). 첫번째 인자는 src_dir, 두번째 인자는 remote_host, 세번째 인자는 dst_dir, 네번째 인자는 password에 할당.

rsync 명령을 실행한다(spawn).

이후 암호를 입력하라는 메세지를 기다렸다가(expect) 접속암호를 보낸다(send).

암호를 입력하고 나면 rsync에서 알아서 백업이 수행되므로 실행권한을 사용자에게 되돌린다(interact).

수동으로 백업을 한다면 굳이 위와 같은 스크립트를 이용할 필요가 없으나, 다수의 디렉토리를 백업할 때 편리하다. 아래의 예시를 보자.

echo "john@192.168.0.10의 접속 암호를 입력해 주세요."
read password
# /home/john 하위에 있는 my_dir_a, my_dir_b, my_dir_c 백업
for src_dir in my_dir_a my_dir_b my_dir_c
do
  expect -f auto_rsync.exp "/home/john/$src_dir" john@192.168.0.10 "/home/john/backup_dir/$src_dir" "$password"
done


read 명령으로 접속암호를 한번만 입력 받은 후, 세개의 디렉토리를 원격에 순차적으로 백업할 수 있다.



핑백

  • 반달가면 : [bash: expect] 리눅스 다중 사용자(multi-user) 환경에서의 작업 자동화 문제 2015-12-09 20:00:34 #

    ... expect 스크립트를 사용할 경우, 접속암호를 인자(argument)로 사용하면 보안 측면에서 한가지 큰 문제가 있다. 이전에 게시했던 ssh 자동접속이라던가, rsync 자동백업이라던가 이런 종류의 작업이 가지고 있는 약점이다. 나 혼자만 사용하는 리눅스 PC/서버라면 별 문제가 되지 않으나, 여러 사람이 함께 사용하는 환경이라면 ... more

  • 반달가면 : [bash: expect] 다중 사용자 환경에서 보안을 강화한 작업 자동화 2015-12-14 21:51:37 #

    ... 저장한 후, expect 스크립트에서 이 임시 파일을 조회하여 사용하도록 하는 것이다. 말로 설명하면 복잡하니 예시를 보는 편이 더 빠르겠다. 이전 게시물에서 사용한 auto_rsync.exp 스크립트를 가지고 생각해 보자. 일단 expect 스크립트 실행은 아래와 같은 형태다. expect -f auto_rsync.exp [sourc ... more

덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

40173
3002
1562586

ad_widget_2