개발자의 길

[리눅스] 쉘스크립트로 (sh) sftp 이용 파일 전송(자동로그인) 본문

6. 리눅스

[리눅스] 쉘스크립트로 (sh) sftp 이용 파일 전송(자동로그인)

자르르 2015. 6. 23. 13:49


​- 리모트서버: 파일을 가져와 최종 저장할 서버

- 로컬서버: 가져올 파일을 갖고 있는 서버

 

1. 로컬서버

#ssh-keygen -t dsa (또는 rsa)

 

실행하면 아래처럼 뭔가 뜨는데 그냥 엔터 누르면 된다. 그럼 계정home 디렉토리에 .ssh/ 디렉토리가 생기고 파일 3개가 생성됨

(Generating public/private rsa key pair.
Enter file in which to save the key (/계정/.ssh/id_dsa 또는 id_rsa) :

(엔터)

Enter passphrase (empty for no passphrase):

(또 엔터) 

Your identification has been saved in …
Your public key has been saved in …

둘 다 엔터를 치면 파일 경로와 파일 명이 출력됨.

보통 id_dsa.pub (또는 id_rsa.pub)로 끝남.

 

나는 dsa로 했으므로 앞으론 dsa로 설명.

 

2. 리모트서버. sftp로 로그인할 계정의 홈디렉토리에서 아래 실행

#mkdir ~/.ssh

 

3. 로컬서버

#scp -P 10022 ~/.ssh/id_dsa.pub user@호스트IP:.ssh/authorized_keys

 

혹, 여러 로컬서버에서 하나의 리모트서버로 접속한다면 각 로컬에 위 명령어 대신에 아래 명령어 사용

#cat ~/.ssh/id_dsa.pub | ssh user@호스트IP "cat>> .ssh/authorized_keys"

 

실행 후 리모트서버 비밀번호 입력

 

4.리모트서버

#chmod 700 ~/.ssh

#chmod 600 ~/.ssh/authorized_keys

 

이렇게 하면 별도의 비밀번호 입력없이 접속이 가능.

쉘 스크립트는 아래.

128.0.0.0의 서버에 접속해서 /fslog/DB_BACKUP의 경로 밑에 있는 db_dump.어제날짜.sql 파일을 가져와서

백업서버의 /export/home/user/backup 경로에 다운로드 받는 스크립트다.

(백업파일을 3일치만 보관하고 이후 파일은 삭제하는 스크립트도 포함 되어있다. find~줄인데 리눅스, 솔라리스 둘 다 사용 가능)

 

아래 스크립트를 리눅스에서 사용한다면,

yesterday를 yesterday=$(date +%y-%m-%d -d'-1days')로 수정해야한다.

 

 #! /bin/sh
REMOTE_FTP_ADDR="128.0.0.0"
REMOTE_USER="root"
REMOTE_DOWNLOAD_PATH="/fslog/DB_BACKUP"
LOCAL_DOWNLOAD_PATH="/export/home/user/backup"
yesterday=$(TZ=KST+15;date +%y-%m-%d)
find /export/home/user/backupl/*.sql -mtime +2 -exec rm -f {} \; >> /tmp/backup.log 2>&1


sftp -oPort=10022 $REMOTE_USER@$REMOTE_FTP_ADDR << EOF

cd $REMOTE_DOWNLOAD_PATH
lcd $LOCAL_DOWNLOAD_PATH
get db_dump.$yesterday.sql
quit
EOF

 

tip) 파일을 가져오는게 아니라 가져다 놓고 싶다면 get db_dump.$yesterday.sql의 get을 put으로 바꿔주면 된다.

 




이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments