이 글에서 배우는 내용
SSH, SFTP, FTP, FTPS의 이름을 외우는 것이 아니라 서버에서 무엇을 하려는지에 따라 어떤 방식을 선택해야 하는지를 기준으로 정리합니다. 접속 정보를 읽는 법부터 SSH 접속, SFTP 파일 전송, 자주 발생하는 오류까지 직접 따라가며 확인합니다.
- SSH와 SFTP의 역할을 구분할 수 있습니다.
- FTP와 FTPS의 차이를 설명할 수 있습니다.
- Host, Port, Username, Password, Key file을 해석할 수 있습니다.
- SSH로 서버에 접속하는 기본 명령을 이해할 수 있습니다.
- SFTP에서 파일을 업로드·다운로드하는 흐름을 이해할 수 있습니다.
- 접속 오류를 네트워크·인증·권한 문제로 나눠 확인할 수 있습니다.
선수 지식: 터미널에서 cd, pwd, ls 정도의 기본 명령을 사용할 수 있으면 충분합니다.
목차
- SSH·SFTP·FTP·FTPS 한눈에 비교
- SSH란?
- SFTP란?
- FTP와 FTPS란?
- 접속 정보 읽는 방법
- SSH와 SFTP 실습
- 접속 오류 해결
- 어떤 방식을 사용해야 할까?
- 정리
- FAQ
SSH·SFTP·FTP·FTPS 한눈에 비교

이 주제는 용어부터 외우면 오히려 헷갈리기 쉽습니다. 먼저 서버에서 명령어를 실행하려는지, 파일을 주고받으려는지를 구분하면 전체 구조가 단순해집니다.
| 구분 | SSH | SFTP | FTP | FTPS |
|---|---|---|---|---|
| 주 목적 | 서버 원격 접속·명령 실행 | 파일 전송 | 파일 전송 | 파일 전송 |
| 암호화 | O | O | X | O |
| 기반 | SSH | SSH | FTP | FTP + TLS |
| 일반적인 기본 포트 | 22 | 22 | 21 | 21 또는 990 |
| 서버 명령 실행 | O | X | X | X |
| 파일 전송 | SFTP·SCP 등 별도 방식 사용 | O | O | O |
| 주로 보는 상황 | 서버 관리 | 안전한 파일 업로드·다운로드 | 레거시 환경 | FTP 호환이 필요한 암호화 환경 |
서버 안에서 명령어를 실행하면 SSH, 파일을 안전하게 주고받으면 우선 SFTP를 떠올리면 됩니다. SFTP는 이름에 FTP가 들어가지만 FTP의 보안 버전이 아니라 SSH 기반 파일 전송 방식입니다.
SSH란?
SSH는 내 컴퓨터에서 원격 서버에 안전하게 접속해 명령어를 실행할 수 있도록 해주는 프로토콜입니다. 화면은 내 컴퓨터의 터미널에 보이지만, 접속 이후 입력한 명령은 원격 서버에서 실행됩니다.
내 PC
↓ SSH
원격 서버
↓
명령어 실행
1. 가장 기본적인 SSH 접속
ssh ubuntu@example.com
ubuntu는 서버 계정 이름이고 example.com은 접속할 서버 주소입니다.
2. 개인키를 사용하는 경우
ssh -i myserver.pem ubuntu@example.com
-i는 접속에 사용할 개인키 파일을 지정하는 옵션입니다. 서버에는 공개키가 등록되고, 사용자는 자신의 개인키를 이용해 인증하는 구조가 일반적입니다.
3. 포트가 22번이 아닌 경우
ssh -p 2222 -i myserver.pem ubuntu@example.com
SSH의 포트 옵션은 소문자 -p입니다. 접속 후에는 일반적인 리눅스 명령으로 서버 상태를 확인할 수 있습니다.
pwd
ls -al
cd /var/www/html
tail -f /var/log/nginx/error.log
퍼블리싱이나 프론트엔드 업무에서는 로그 확인, 파일 권한 점검, 배포 명령 실행, 프로세스 재시작 등이 필요할 때 SSH를 접하게 됩니다.
SFTP란?
SFTP는 SSH 기반의 파일 전송 방식입니다. SSH가 서버에 들어가 명령어를 실행하는 용도라면, SFTP는 같은 SSH 계열의 보안 통로를 이용해 서버 파일을 탐색하고 업로드·다운로드하는 데 초점이 있습니다.
내 PC
↓ SFTP
원격 서버의 파일
기본 접속
sftp ubuntu@example.com
개인키 사용
sftp -i myserver.pem ubuntu@example.com
사용자 지정 포트 사용
sftp -P 2222 -i myserver.pem ubuntu@example.com
SFTP의 포트 옵션은 대문자 -P입니다. SSH의 -p와 대소문자가 다르므로 실습할 때 자주 헷갈리는 부분입니다.
SFTP에서 자주 사용하는 명령
| 명령 | 의미 |
|---|---|
pwd |
현재 원격 서버 폴더 확인 |
lpwd |
현재 로컬 폴더 확인 |
ls |
원격 서버 파일 목록 확인 |
lls |
로컬 파일 목록 확인 |
get report.txt |
서버 파일을 로컬로 다운로드 |
put sample.txt |
로컬 파일을 서버로 업로드 |
exit |
SFTP 종료 |
특히 pwd와 lpwd를 구분하는 습관이 중요합니다. 파일을 잘못된 위치에 올리는 실수는 로컬 경로와 원격 경로를 혼동하면서 자주 발생합니다.
FTP와 FTPS란?
FTP는 파일을 서버와 주고받기 위한 전통적인 프로토콜입니다. 하지만 기본 FTP 연결은 인증 정보와 데이터가 암호화되지 않기 때문에 새 환경에서 직접 방식을 선택할 수 있다면 일반적으로 그대로 사용하지 않습니다.
FTPS는 FTP에 TLS 암호화를 적용한 방식입니다. 즉, SFTP와 달리 SSH 기반이 아니라 기존 FTP 계열을 보안 연결로 확장한 구조입니다.
FTP = 전통적인 파일 전송
FTPS = FTP + TLS 암호화
SFTP = SSH 기반 파일 전송
참고: FTPS에는 Explicit와 Implicit 방식이 있습니다. Explicit FTPS는 일반적으로 21번 포트에서 TLS 사용을 협상하고, Implicit FTPS는 990번 포트를 사용하는 구성이 알려져 있습니다. 실제 운영 환경에서는 관리자가 제공한 접속 방식과 포트를 우선 확인해야 합니다.
따라서 “SFTP는 FTP의 보안 버전”이라고 외우기보다, FTPS는 FTP 계열, SFTP는 SSH 계열이라고 구분하는 편이 정확합니다.
접속 정보 읽는 방법

실무에서는 프로토콜 설명보다 아래와 같은 접속 정보를 먼저 전달받는 경우가 많습니다. 각 항목이 무엇을 뜻하는지 알면 어떤 도구를 사용해야 하는지 판단하기 쉬워집니다.
| 항목 | 의미 | 예시 |
|---|---|---|
| Host | 접속할 서버 주소 | example.com |
| Port | 접속할 서비스의 포트 | 22 |
| Username | 서버 계정 | ubuntu |
| Password | 비밀번호 인증 정보 | ******** |
| Key file | 개인키 인증 파일 | server.pem |
SSH·SFTP 계열로 보이는 예
Host: example.com
Port: 22
Username: ubuntu
Key: server.pem
이 정보라면 SSH 또는 SFTP 계열일 가능성을 먼저 생각할 수 있습니다. 다만 22번 포트라는 이유만으로 프로토콜을 확정하면 안 됩니다. 포트는 운영자가 변경할 수 있고, 같은 SSH 서비스 안에서도 계정별로 셸 접속과 SFTP 허용 범위가 다를 수 있습니다.
FTP·FTPS 계열로 보이는 예
Host: example.com
Port: 21
Username: myaccount
Password: 관리자에게 전달받은 값
이 조합은 FTP 또는 Explicit FTPS 계열일 가능성이 있습니다. 실제 현장에서는 관습적으로 “FTP 정보”라고 부르면서 SFTP 정보를 전달하는 경우도 있으므로, 이름만 믿지 말고 접속 프로그램의 프로토콜 설정과 포트를 함께 확인하는 것이 안전합니다.
또 하나 자주 보는 계정이 root입니다. root는 리눅스 최고 관리자 계정이므로 운영 서버에서는 직접 로그인을 제한하고, ubuntu나 ec2-user 같은 일반 계정으로 접속한 뒤 필요한 작업에만 sudo를 사용하는 구성이 흔합니다.
실습: 같은 서버를 SSH와 SFTP로 사용해보기
이제 같은 접속 정보를 SSH와 SFTP에서 각각 사용해보면 두 방식의 역할 차이가 명확해집니다. 아래의 example.com, deploy, 키 경로는 관리자가 제공한 자신의 실습 서버 정보로 바꿔 사용합니다. 운영 파일을 바로 덮어쓰기보다 쓰기 허용된 테스트 디렉터리에서 먼저 확인하는 편이 안전합니다.
1단계. SSH로 접속
ssh -p 2222 -i ~/.ssh/lab_ed25519 deploy@example.com
2단계. 서버의 현재 위치 확인
pwd
ls -al
이 상태에서는 서버 안에서 명령어를 실행하고 있습니다.
3단계. SFTP로 접속
sftp -P 2222 -i ~/.ssh/lab_ed25519 deploy@example.com
4단계. 원격·로컬 위치 확인
pwd
lpwd
ls
lls
5단계. 테스트 파일 업로드
put sample.txt
6단계. 파일 다운로드
get sample.txt
여기서 경험해야 할 핵심은 단순합니다. SSH에서는 서버 안의 명령을 실행하고, SFTP에서는 로컬과 서버 사이의 파일을 다룹니다. 같은 서버 주소와 계정을 사용할 수 있어도 사용 목적과 인터페이스가 다릅니다.
또한 파일 업로드 성공이 애플리케이션 배포 성공을 의미하지는 않습니다. 빌드나 프로세스 재시작이 필요한 애플리케이션은 별도의 배포 절차가 필요합니다. 개인키 파일 역시 서버에 업로드하는 파일이 아닙니다.
접속 오류 해결
오류 메시지를 보면 무작정 설정을 바꾸기보다 네트워크 → 인증 → 서버 신원 → 파일 권한 순서로 원인을 좁히는 편이 효율적입니다.
| 증상 | 먼저 확인할 것 | 대응 기준 |
|---|---|---|
Connection timed out |
Host, Port, 방화벽, VPN, 허용 IP | 서버 주소와 포트가 맞는지, 현재 네트워크가 허용되어 있는지 확인 |
Permission denied (publickey) |
Username, 개인키, 서버에 등록된 공개키 | 올바른 계정과 키 조합인지 확인하고 개인키 내용은 노출하지 않음 |
Host key verification failed |
known_hosts와 서버 지문 |
서버가 실제로 변경된 것인지 관리자에게 별도 경로로 확인한 뒤 갱신 |
접속은 되지만 put 실패 |
대상 경로, 소유자, 쓰기 권한 | 쓰기 가능한 테스트 경로인지 확인하고 필요한 권한만 조정 |
권한 오류가 난다고 해서 무조건 chmod 777로 해결하면 안 됩니다. 모든 사용자에게 과도한 권한을 주는 방식이므로 실제 원인이 소유자 문제인지, 그룹 권한 문제인지, 대상 경로 문제인지 먼저 확인해야 합니다.
SSH 접속에 성공했더라도 SFTP가 반드시 허용되는 것은 아닙니다. 서버의 SFTP 서브시스템 설정이나 계정 정책에 따라 SFTP가 차단될 수 있습니다. 반대로 SFTP 전용 계정은 셸 명령을 실행하지 못하도록 제한할 수도 있습니다.
어떤 방식을 사용해야 할까?
| 하려는 작업 | 우선 확인할 방식 |
|---|---|
| 서버에서 명령어 실행 | SSH |
| 서버에 파일 업로드·다운로드 | SFTP 우선 검토 |
| 기존 시스템이 FTP만 제공 | FTP |
| FTP 호환이 필요하면서 암호화도 필요 | FTPS |
새 환경에서 직접 방식을 선택할 수 있다면 파일 전송은 일반적으로 SFTP를 우선 검토하고, 서버 관리 작업에는 SSH를 사용하면 이해하기 쉽습니다. 다만 회사나 호스팅 서비스에서 특정 프로토콜을 지정했다면 그 환경의 정책과 제공 설정을 따라야 합니다.
도구는 목적에 맞춰 선택
파일 전송 중심 → FileZilla, WinSCP 등
명령어 작업 → Terminal, PuTTY, VS Code 터미널 등
둘 다 필요 → SSH + SFTP 조합
같은 프로그램에서도 FTP, FTPS, SFTP를 모두 지원할 수 있으므로 프로그램 이름보다 실제로 선택한 프로토콜을 확인하는 것이 중요합니다.
정리
SSH = 서버에 들어가 명령 실행
SFTP = SSH 기반 파일 전송
FTP = 전통적인 파일 전송
FTPS = TLS를 적용한 FTP
핵심은 SSH와 SFTP를 경쟁 관계처럼 보는 것이 아니라 같은 SSH 계열에서 목적이 다른 기능으로 이해하는 것입니다. 접속 정보를 받으면 먼저 무엇을 하려는지 정하고, Host·Port·Username·인증 방식을 확인한 뒤 적절한 도구를 선택하면 됩니다.
학습 완료 기준: SSH와 SFTP의 차이를 설명하고, 로컬·원격 경로를 구분한 상태에서 테스트 파일을 업로드·다운로드한 뒤 크기와 내용을 확인할 수 있으면 충분합니다.
FAQ
Q. SSH와 SFTP는 같은 계정으로 접속하나요?
같은 SSH 계정 정보를 사용하는 구성이 많지만 서버 정책에 따라 다를 수 있습니다. SSH 셸 접속과 SFTP 권한은 별도로 제한할 수 있습니다.
Q. SSH가 되면 SFTP도 무조건 되나요?
아닙니다. SSH 접속이 가능해도 SFTP 서브시스템이 비활성화되어 있거나 해당 계정에 SFTP 권한이 없으면 접속되지 않을 수 있습니다.
Q. FTP 대신 SFTP를 사용해도 되나요?
서버가 SFTP를 지원하고 계정 권한이 있다면 사용할 수 있습니다. 다만 FTP와 SFTP는 서로 다른 프로토콜이므로 서버가 FTP만 제공하는 환경에서는 임의로 SFTP로 바꿀 수 없습니다.
Q. FileZilla에서 SFTP도 사용할 수 있나요?
가능합니다. 접속 설정에서 프로토콜을 SFTP로 선택하고 서버가 제공한 Host, Port, Username, Password 또는 Key file 정보를 입력하면 됩니다.
Q. 22번 포트면 무조건 SFTP인가요?
아닙니다. 22번은 SSH의 기본 포트이며 SFTP도 보통 같은 SSH 연결을 사용합니다. 하지만 관리자가 다른 포트로 변경할 수 있으므로 포트 번호만으로 프로토콜을 확정하면 안 됩니다.
Q. .pem 파일은 무엇인가요?
SSH 인증에 사용할 수 있는 개인키 파일 형식 중 하나입니다. 비밀번호 대신 개인키를 이용해 서버가 사용자를 인증하는 환경에서 자주 볼 수 있습니다. 개인키 내용은 외부에 공개하거나 서버에 업로드하면 안 됩니다.
이 글의 명령 형식과 포트 옵션은 OpenSSH 공식 매뉴얼의 SSH·SFTP 문서를 기준으로 확인했습니다. OpenSSH ssh 매뉴얼 · OpenSSH sftp 매뉴얼
같이 읽으면 좋은 글
이 글이 도움이 되었나요?
배포·서버 학습 순서
필수 2개 · 전체 7개
읽음 기록 관리
전체 과정 목차 (7개)
- 필수 길잡이 · 프론트엔드 배포 로드맵: Vercel·Firebase Hosting·App Hosting 선택 기준
- 필수 길잡이 · Firebase Hosting App Hosting 차이: 정적 배포와 SSR 기준
- 선택 참고 · SSH SFTP FTP 차이: 서버 접속과 파일 전송 기준 잡기 현재 글
- 선택 참고 · Vercel Next.js 배포 실패 해결 체크리스트: 빌드 로그·환경변수·Node 버전 확인법
- 선택 참고 · Vercel 404 NOT_FOUND 오류 해결: Next.js 배포 후 라우팅과 rewrites 확인
- 선택 참고 · GitHub Actions npm ci 실패 해결: lockfile과 Node 버전 확인
- 선택 참고 · 프론트엔드 배포 오류 해결 허브: Vercel, Netlify, Firebase 체크리스트
새 글 받아보기
RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.