SFTP 연동하기

김현송·2023년 10월 17일
0

FTP vs SFTP

SFTP연동을 하기에 앞서 FTP와 SFTP의 차이점에 대해 이해하고 있어야 합니다. 이 둘의 차이점을 아신다면 다음 chapter로 넘어가셔도 됩니다.

FTP(port:21)SFTP(port:22)
파라미터로 패스워드를 전송파라미터로 패스워드 전송이 불가능

보안적인 측면에 있어서 SFTP 방식이 기존의 인증키를 공유함으로써 패스워드의 노출을 막고 인증된 사용자만이 ftp 서버에 로그인할 수 있습니다.

SFTP 접속방식

SFTP는 SSH 방식으로 서버 간에 암호화된 데이터를 주고 받습니다. SFTP는 기본적으로 22번 포트를 사용하므로 방화벽을 열어주어야 합니다.
방화벽 open 및 포트 Listen과 동시에 Local Server와 접속할 FTP 서버간 인증키를 발급해서 공유해 놓습니다.

SSH key

  1. 인증키가 있는경우 발급할 필요없이 해당 키를 전송하면 됩니다.
    a. 인증키 확인

    ls -al ~/.ssh
  1. 인증키가 없는경우 새롭게 생성하여 해당 키를 전송해야 합니다.
    a. 인증키 생성

    ssh-keygen -t rsa
  2. 생성(확인)한 ssh key를 서버에 전송합니다.

    ssh-copy-id -i ~/.ssh/id_rsa.pub <서버 IP>

이제 FTP서버(DST 서버)에 ssh로 password 없이 접속이 가능합니다.

Script로 SFTP 연동하기

이제 ssh 키 인증을 통해 자유롭게 접근이 가능한 SFTP 서버를 PUT 형태로 파일을 전송해 보도록 하겠습니다.

  1. 수집 서버에서 스크립트를 작성합니다.
#!/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 스크립트명
  1. 이제 cron에 등록하여 매일 수집할 수 있도록 자동화합니다.
crontab -e

각 *는 띄어쓰기로 구분하며 왼쪽부터 주기적으로 실행할 분 / 시 / 일 / 월 / 요일(일요일(0) ~ 토요일(6)) 을 의미합니다. 이후 실행할 커맨드라인을 입력하면 crontab에 등록할 수 있습니다.

감사합니다.

profile
안녕하세요

0개의 댓글

관련 채용 정보