본문 바로가기

리눅스

FTP 서버에 접속하고 모든 파일을 로컬 디렉토리에 다운로드하는 스크립트

반응형

lftp를 사용하여 FTP 서버에 접속하고 모든 파일을 로컬 디렉토리에 다운로드하는 스크립트

리눅스에서 FTP 클라이언트를 사용하여 FTP 서버에 접속하고 모든 파일을 다운로드하려면 ftp, lftp, wget와 같은 도구를 사용할 수 있습니다.

lftp는 강력하고 유연한 FTP/HTTP 클라이언트로 배치 작업에 적합합니다.

lftp 설치

Ubuntu

sudo apt-get update
sudo apt-get install lftp

CentOS

sudo yum install lftp

lftp 사용

lftp를 사용하여 FTP 서버에 접속하고 모든 파일을 다운로드하는 방법입니다.

lftp -u 사용자이름,비밀번호 ftp://서버주소

접속 후에 모든 파일을 다운로드하는 명령은 mirror 명령을 사용합니다. 예를 들어, 모든 파일을 현재 디렉토리에 다운로드하려면 다음과 같이 합니다.

mirror --verbose /원격_디렉토리 /로컬_디렉토리

예를 들어, 사용자 이름이 user이고 비밀번호가 password인 경우, FTP 서버 주소가 ftp.example.com이며, 원격 디렉토리가 /remote_dir이고 로컬 디렉토리가 local_dir이라고 가정합니다.

1. FTP 서버에 접속

lftp -u user,password ftp://ftp.example.com

모든 파일을 로컬 디렉토리에 다운로드

mirror --verbose /remote_dir /local_dir
728x90

자동화 스크립트 예제

.env 파일 생성

  • 프로젝트 루트 디렉토리에 .env 파일을 생성합니다.
cd /root/cdn
vim .env
FTP_USER=ftpuser
FTP_PASSWORD=ftppassword1!

.env 파일 로드 스크립트 작성

  • 스크립트를 작성하여 .env 파일에서 환경 변수를 로드합니다.
vim ftp_dev_download.sh
#!/bin/bash

# .env 파일 로드
if [ -f .env ]; then
    export $(cat .env | grep -v '^#' | xargs)
fi

# 변수 설정
SERVER="ftp.sangchul.kr"
PORT="7777"
REMOTE_DIR="/"
LOCAL_DIR="/root/cdn/dev/"
LOG_FILE="/root/cdn/log/lftp_mirror.log"

# 로그 파일 디렉토리 생성
LOG_DIR=$(dirname "$LOG_FILE")
mkdir -p "$LOG_DIR"

# lftp 명령 실행
{
    echo "Starting FTP mirroring process..."
    lftp -u "$FTP_USER","$FTP_PASSWORD" "ftp://$SERVER:$PORT" <<EOF
    mirror --verbose $REMOTE_DIR $LOCAL_DIR
    bye
EOF

    if [ $? -eq 0 ]; then
        echo "FTP mirroring completed successfully."
    else
        echo "FTP mirroring encountered an error."
    fi
} 2>&1 | tee -a "$LOG_FILE"

# 권한 설정을 통해 로그 파일의 보안도 강화
chmod 600 "$LOG_FILE"

스크립트 파일에 실행 권한을 부여

chmod +x ftp_dev_download.sh

스크립트를 실행

bash ftp_dev_download.sh

스크립트 설명

  • if [ -f .env ]; then ... fi : .env 파일이 존재하는지 확인하고 있으면 그 내용을 환경 변수로 로드합니다.
  • export $(cat .env | grep -v '^#' | xargs) : .env 파일에서 주석을 제외하고 모든 줄을 환경 변수로 설정합니다.
  • $FTP_USER와 $FTP_PASSWORD 환경 변수는 .env 파일에서 설정한 값을 사용하여 FTP 자격 증명을 설정합니다.

이 방법을 사용하면 스크립트 코드에서 직접적으로 민감한 정보를 노출하지 않고 .env 파일을 통해 안전하게 관리할 수 있습니다.

로컬 디렉토리를 S3 버킷에 미러링

로컬 디렉토리의 내용을 S3 버킷에 업로드하여 동기화하는 명령어입니다.

aws s3 sync /root/cdn/dev s3://your-bucket-name

 

728x90
반응형