SFTP연동을 하기에 앞서 FTP와 SFTP의 차이점에 대해 이해하고 있어야 합니다. 이 둘의 차이점을 아신다면 다음 chapter로 넘어가셔도 됩니다.
FTP(port:21) | SFTP(port:22) |
---|---|
파라미터로 패스워드를 전송 | 파라미터로 패스워드 전송이 불가능 |
보안적인 측면에 있어서 SFTP 방식이 기존의 인증키를 공유함으로써 패스워드의 노출을 막고 인증된 사용자만이 ftp 서버에 로그인할 수 있습니다.
SFTP는 SSH 방식으로 서버 간에 암호화된 데이터를 주고 받습니다. SFTP는 기본적으로 22번 포트를 사용하므로 방화벽을 열어주어야 합니다.
방화벽 open 및 포트 Listen과 동시에 Local Server와 접속할 FTP 서버간 인증키를 발급해서 공유해 놓습니다.
인증키가 있는경우 발급할 필요없이 해당 키를 전송하면 됩니다.
a. 인증키 확인
ls -al ~/.ssh
인증키가 없는경우 새롭게 생성하여 해당 키를 전송해야 합니다.
a. 인증키 생성
ssh-keygen -t rsa
생성(확인)한 ssh key를 서버에 전송합니다.
ssh-copy-id -i ~/.ssh/id_rsa.pub <서버 IP>
이제 FTP서버(DST 서버)에 ssh로 password 없이 접속이 가능합니다.
이제 ssh 키 인증을 통해 자유롭게 접근이 가능한 SFTP 서버를 PUT 형태로 파일을 전송해 보도록 하겠습니다.
#!/bin/bash
# SFTP 서버로 보낼 파일에 포함된 날짜형식을 정의합니다.
IB_DATE=`date -d "-1 days" +%Y%m%d`
# 서버를 작성합니다.
IP=192.168.1.13
# put할 대상 파일의 위치를 작성합니다.
SRC_DIR=“/var/log“
# sftp 서버의 저장 경로를 설정합니다. 해당 경로는 자동으로 발급된 앞 내용의 경로를 작성해야 합니다.
DST_DIR=“/192.168.1.35/22“
# 루트 계정을 원하시지 않는다면 sftp 그룹과 계정을 만들어 DST_DIR 경로에 접근권한을 부여하면 됩니다.
sftp root@$IP << End-Of-Session
lcd $SRC_DIR
cd $DST_DIR
put maillog-${IB_DATE}*
bye
End-Of-Session
sh 스크립트명
crontab -e
각 *는 띄어쓰기로 구분하며 왼쪽부터 주기적으로 실행할 분 / 시 / 일 / 월 / 요일(일요일(0) ~ 토요일(6)) 을 의미합니다. 이후 실행할 커맨드라인을 입력하면 crontab에 등록할 수 있습니다.
감사합니다.