리눅스

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

변군이글루 2024. 7. 11. 15:46
반응형

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
반응형