SFTP Overview
SFTP Overview
1. SFTP란?
SFTP(SSH File Transfer Protocol)는 SSH(Secure Shell) 프로토콜을 기반으로 파일을 안전하게 전송하는 프로토콜입니다. 기존 FTP와 달리 모든 데이터가 암호화되어 전송되므로 보안이 중요한 환경에서 널리 사용됩니다.
1.1. SFTP vs FTP vs SCP
| 특징 | SFTP | FTP | SCP |
|---|---|---|---|
| 암호화 | SSH 기반 암호화 | 기본적으로 없음 | SSH 기반 암호화 |
| 포트 | 22 (SSH) | 21 (제어), 20 (데이터) | 22 (SSH) |
| 대화형 모드 | 지원 | 지원 | 미지원 |
| 전송 재개 | 지원 | 지원 | 미지원 |
| 디렉토리 작업 | 지원 | 지원 | 제한적 |
1.2. SFTP를 사용하는 이유
- 보안: SSH 암호화로 데이터 도청 방지
- 방화벽 친화적: 단일 포트(22)만 사용
- 대화형 작업: 원격 파일 시스템 탐색 가능
- 전송 재개: 중단된 전송을 이어서 진행 가능
2. SFTP 접속 방법
2.1. 기본 접속
1
❯ sftp username@hostname
2.2. 포트 지정 접속
기본 SSH 포트(22)가 아닌 다른 포트를 사용하는 경우 -P 옵션을 사용합니다.
1
❯ sftp -P 2222 username@hostname
SFTP에서는 대문자
-P를 사용합니다. 소문자-p는 파일 권한 보존 옵션입니다.
2.3. SSH 키 인증 접속
비밀번호 대신 SSH 키를 사용하여 접속할 수 있습니다.
1
❯ sftp -i ~/.ssh/id_rsa username@hostname
3. 주요 명령어
SFTP에 접속하면 sftp> 프롬프트가 표시됩니다. 이 상태에서 다양한 명령어를 사용할 수 있습니다.
3.1. 디렉토리 탐색
| 명령어 | 설명 | 예시 |
|---|---|---|
pwd | 원격 서버의 현재 디렉토리 확인 | pwd |
lpwd | 로컬의 현재 디렉토리 확인 | lpwd |
ls | 원격 서버 파일 목록 조회 | ls -la |
lls | 로컬 파일 목록 조회 | lls -la |
cd | 원격 서버 디렉토리 이동 | cd /var/log |
lcd | 로컬 디렉토리 이동 | lcd ~/Downloads |
3.2. 파일 다운로드 (get)
원격 서버에서 로컬로 파일을 다운로드합니다.
1
2
3
4
5
6
7
8
# 단일 파일 다운로드
sftp> get remote_file.txt
# 다른 이름으로 다운로드
sftp> get remote_file.txt local_file.txt
# 디렉토리 전체 다운로드 (-r 옵션)
sftp> get -r remote_directory
3.3. 파일 업로드 (put)
로컬에서 원격 서버로 파일을 업로드합니다.
1
2
3
4
5
6
7
8
# 단일 파일 업로드
sftp> put local_file.txt
# 다른 이름으로 업로드
sftp> put local_file.txt remote_file.txt
# 디렉토리 전체 업로드 (-r 옵션)
sftp> put -r local_directory
3.4. 파일 및 디렉토리 관리
| 명령어 | 설명 | 예시 |
|---|---|---|
mkdir | 원격 서버에 디렉토리 생성 | mkdir new_folder |
rmdir | 원격 서버 빈 디렉토리 삭제 | rmdir empty_folder |
rm | 원격 서버 파일 삭제 | rm old_file.txt |
rename | 원격 서버 파일/디렉토리 이름 변경 | rename old.txt new.txt |
chmod | 원격 서버 파일 권한 변경 | chmod 644 file.txt |
chown | 원격 서버 파일 소유자 변경 | chown user:group file.txt |
3.5. 기타 유용한 명령어
| 명령어 | 설명 |
|---|---|
help 또는 ? | 사용 가능한 명령어 목록 표시 |
!command | 로컬에서 쉘 명령어 실행 (예: !ls) |
exit 또는 quit | SFTP 세션 종료 |
4. 실용적인 사용 예시
4.1. 로그 파일 다운로드
서버의 로그 파일을 로컬로 다운로드하는 예시입니다.
1
2
3
4
5
6
7
8
9
10
11
❯ sftp username@hostname
sftp> cd /var/log
sftp> ls
auth.log syslog nginx/
sftp> get auth.log
Fetching /var/log/auth.log to auth.log
auth.log 100% 125KB 12.5MB/s 00:00
sftp> exit
4.2. 웹 서버에 파일 배포
로컬에서 작업한 파일을 웹 서버에 업로드하는 예시입니다.
1
2
3
4
5
6
7
8
9
10
11
❯ sftp username@hostname
sftp> cd /var/www/html
sftp> put -r dist/
Uploading dist/ to /var/www/html/dist
Entering dist/
dist/index.html 100% 2048 2.0MB/s 00:00
dist/style.css 100% 4096 4.0MB/s 00:00
dist/app.js 100% 8192 8.0MB/s 00:00
sftp> exit
4.3. 배치 모드로 자동화
-b 옵션을 사용하면 명령어 파일을 지정하여 자동으로 실행할 수 있습니다.
1
2
3
4
5
6
7
8
# sftp_commands.txt 파일 생성
❯ cat sftp_commands.txt
cd /backup
get database_backup.sql
exit
# 배치 모드 실행
❯ sftp -b sftp_commands.txt username@hostname
5. 요약
이 포스트에서는 SFTP의 개념과 CLI를 통한 사용 방법을 살펴보았습니다. SFTP는 SSH 기반의 암호화된 파일 전송 프로토콜로, 보안이 중요한 환경에서 파일을 안전하게 전송할 수 있습니다. get, put 명령어로 파일을 주고받고, l 접두사가 붙은 명령어(lls, lcd 등)로 로컬 시스템을 조작할 수 있다는 점을 기억하면 쉽게 사용할 수 있습니다.
6. Reference
궁금하신 점이나 추가해야 할 부분은 댓글이나 아래의 링크를 통해 문의해주세요. Written with KKamJi
This post is licensed under CC BY 4.0 by the author.
