본문 바로가기
Development/linux

shell script로 ftp 자동 전송

by 로젠크로와싱 2012. 9. 24.
반응형

쉘 스크립트로 FTP를 전송하려면, 로그인 해야되는거 다들 아신다고 보고, crontab으로 예약 FTP전송이 가능한 쉘 스크립트를 작성해 보겠습니다. 물론 저도 처음이고, 회사에서 필요하여 여기저기 기웃거리면서 작성했습니다.

기능은 자동으로 로그인, 만약 첫 로그인이라면 RSA를 HOST에 등록하는 작업 , 최신의 파일을 서버측에 업로드, 디렉토리일 경우, 하위 파일을 모두 서버측에 업로드를 하는 기능을 가진 스크립트 입니다.

rpm, yum 같은 패키지 설치 명령어로 expect 관련 패키지를 설치하셔야지만, 대화형 콘솔을 자동으로 처리할 수 있습니다.

아.. 참고로 이 스크립트는 sftp 로그인관련해서 자동으로 접속하여 전송하는 기능을 가집니다.

기본 적인 구조는 

#!/usr/bin/bash   

bash 관련 쉘 스크립트를 사용하겠다는 선언부입니다.

이 부분은 반복문을 통한 여러 파일을 전송할 때에 사용합니다. 

sftp user@host

put file

bye

큰 그림은 이렇습니다. 호스트에 ftp 접속하고, 파일을 업로드 하고, 종료

하지만, 그냥 쓰자면, 수동으로 계속 로그인을 해야되서, 불편하기도 합니다.

이제 이부분을 expect 쉘 명령어를 이용하여, 자동으로 접속하는 쉘을 짜 보도록 하겠습니다.

저는 리눅스가 설치되어 있지 않기 때문에 cygwin을 이용하여, 테스트를 했었습니다. ;;ㅎ

main.sh (upload.sh)

상위 main.sh에서는 sftp를 로그인하는 스크립트를 호출하는 부분이 있습니다.

expect ShellScript [argument, ] 이렇게 호출을 하는데, agument 부분에 파라메터를 넘기면, expect로 호출되는 쉘에는 이 파라메터를 받아서 사용할 수 있습니다. 

파라메터에는 ftp 주소, 아이디, 비밀번호, 파일명 파일경로 같은 것을 넘겼습니다. 이유는, 반복문을 통해, 여러 서버에 자료를 전송하기 위해서 저렇게 설정해놓았습니다.

sftp_rsa.sh

처음 sftp를 접속하게 되면, 보안때문에, "Are you ~ continue (yes/no)?" 라는 문구 때문에, 자동 접속이 되지 않습니다. 

이럴때에를 위해, upload.sh에서 이 부분을 호출하여, 자동으로 yes를 기입하고, 비밀번호까지 자동 입력하게 되면, rsa_done 이라는 파일을 생성하고, 다음 번의 upload 호출에는 이 rsa 스크립트를 호출하지 않습니다. (현재 문제점이라면, 다음번에 새로 ftp 서버를 추가한다면, 이 스크립트가 호출되지 않기 때문에 rsa를 생성할 수 없는데, rsa_done에 완료된 서버 리스트를 넣고, diff를 통해, 새로 추가된 서버에 rsa를 생성하게 끔, 수정하면 될 것 같습니다.)

sftp_put, sftp_put_dir.sh 

이 스크립트는 파일과 디렉토리(하위 포함)를 서버측에 업로드 하는 스크립트 입니다. 현재 업로드할 파일이 디렉토리인지 아닌지 if 문을 통해 판별하고, put이냐, put_dir이냐 분기를 합니다.

put이면 그냥 업로드를 진행하지만, 디렉토리 즉 put_dir이 호출되면, mkdir을 통해 서버에 폴더를 만들고, 파일 업로드를 진행합니다.


이 스크립트를 지극히 개인적인 작업에 의해 생성된 결과 물로서, 효율성으로 따지면, 폐기물에 가까운,, 결과입니다. 하하하하하하

좋은 하루 되십시오~


반응형