Windows에서 OpenSSH SFTP 서버 구축과 WinSCP 공개키 로그인 실습
이번 글에서는 Windows 11 환경에서 내장된 OpenSSH Server를 활용해 SFTP 서버를 구축하고, WinSCP 클라이언트를 통해 공개키 기반 로그인까지 완료한 과정을 공유하려고 한다. Python 같은 별도 환경 없이도 순수하게 Windows 기능만으로 충분히 테스트 가능하며, 실제 운영환경을 준비하기 위한 사전 학습용으로도 적절하다.
다음 개념들에 대해 먼저 간단히 짚고 넘어가도록 하겠다.
OpenSSH란? OpenSSH는 “Secure Shell(SSH)” 프로토콜을 구현한 오픈소스 소프트웨어로, 암호화된 원격 로그인과 파일 전송(SFTP, SCP 등)을 지원한다. 리눅스와 macOS에서는 기본으로 제공되며, 최근 Windows 10/11에서도 내장 기능으로 설치 및 사용이 가능하다.
sshd란? sshd는 “Secure Shell Daemon”의 줄임말로, SSH 서버 역할을 수행하는 백그라운드 프로세스다. 클라이언트가 ssh나 sftp로 접속하면 이를 처리하고 인증, 터널링, 파일 전송 등을 제공하는 서버 측 핵심 구성 요소이다.
sftp란? SFTP는 “SSH File Transfer Protocol”의 약자로, SSH 프로토콜 위에서 동작하는 보안 파일 전송 프로토콜이다. FTP와 달리 암호화된 채널을 사용하며, 인증부터 데이터 송수신까지 모두 안전하게 처리됩니다. 포트는 기본적으로 22번을 사용한다.
WinSCP란? WinSCP는 Windows에서 가장 널리 사용되는 GUI 기반 SFTP/FTP 클라이언트다. 드래그앤드롭 방식으로 직관적인 파일 전송이 가능하고, 공개키 기반 인증을 포함한 다양한 보안 설정을 지원한다. 특히 Windows 환경에서 SSH 서버와의 파일 송수신 테스트에 매우 유용한 도구다.
- OpenSSH Server 설치와 실행
- SSH 키 쌍 생성 및 등록
- sshd_config 설정
- CLI에서 sftp 클라이언트의 서버 접속 테스트
- WinSCP에서 sftp 클라이언트의 서버 접속 테스트
- 결과 요약
1. OpenSSH Server 설치와 실행 ** 우선 PowerShell(관리자 권한)에서 다음 명령어로 OpenSSH Server 기능을 설치한다.
1
2
3
# OpenSSH Server 설치
DISM /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
설치가 완료되면 다음 명령어로 서비스를 제어할 수 있다.
1
2
3
4
5
Start-Service sshd # 서비스 시작
Stop-Service sshd # 서비스 중단
Restart-Service sshd # 설정 변경 후 재시작
Get-Service sshd # 상태 확인
그리고 시스템 부팅 시 자동으로 시작되도록 설정하려면 다음 명령어를 입력한다.
| 동작 | 명령어 |
|---|---|
| 자동 시작 설정 | Set-Service -Name sshd -StartupType 'Automatic' |
| 수동 시작으로 변경 | Set-Service -Name sshd -StartupType 'Manual' |
| 완전 비활성화 | Set-Service -Name sshd -StartupType 'Disabled' |
서버가 실행되고 있음을 확인했다.
2. SSH 키 쌍 생성 및 등록 ** SFTP 접속 시 비밀번호 대신 사용할 공개키 인증을 위해, 먼저 SSH 키 쌍을 생성한다. 사용자 홈 디렉토리에서 다음 명령어를 입력한다.
1
2
ssh-keygen -t rsa -b 2048 -f "$env:USERPROFILE\.ssh\id_rsa"
여기서 passphrase는 입력해도 되고 생략해도 된다. 생략하면 WinSCP나 자동화 스크립트에서 비밀번호 입력 없이 바로 로그인할 수 있어서 편리하다. 물론 보안을 생각하면 설정하는 것이 좋기 때문에 나는 설정하도록 했다. 공개키(authorized_keys)는 다음 명령으로 등록할 수 있다.
1
2
type "$env:USERPROFILE\.ssh\id_rsa.pub" >> "$env:USERPROFILE\.ssh\authorized_keys"
authorized_keys 파일을 생성했다.
3. sshd_config 설정
OpenSSH는 설정 파일인 sshd_config를 통해 서버 동작 방식을 조정할 수 있다. 설정 파일 위치는 다음과 같다.
1
2
C:\ProgramData\ssh\sshd_config
설정 파일이 없다면 수동으로 작성하면 되고, 내용을 다음과 같이 설정한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Port 22
Protocol 2
HostKey __PROGRAMDATA__\ssh\ssh_host_rsa_key
HostKey __PROGRAMDATA__\ssh\ssh_host_ecdsa_key
HostKey __PROGRAMDATA__\ssh\ssh_host_ed25519_key
AuthenticationMethods publickey
PubkeyAuthentication yes
PasswordAuthentication no
AuthorizedKeysFile .ssh/authorized_keys
Subsystem sftp sftp-server.exe
powershell에서는 다음 명령어로 자동 생성할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 기본 sshd_config 파일(C:\ProgramData\ssh\sshd_config) 생성 PowerShell 명령어
@"
# 기본 SSH 설정 (공개키 인증 허용)
Port 22
Protocol 2
HostKey __PROGRAMDATA__\\ssh\\ssh_host_rsa_key
HostKey __PROGRAMDATA__\\ssh\\ssh_host_ecdsa_key
HostKey __PROGRAMDATA__\\ssh\\ssh_host_ed25519_key
AuthenticationMethods publickey
PasswordAuthentication no
AuthorizedKeysFile .ssh/authorized_keys
Subsystem sftp sftp-server.exe
"@ | Out-File -Encoding ascii -FilePath "$env:ProgramData\ssh\sshd_config"
- AuthenticationMethods publickey: 공개키 인증만 허용 (비밀번호는 사용하지 않음)
- PubkeyAuthentication yes: 공개키 인증(passphrase)을 활성화
- PasswordAuthentication no: 비밀번호(password) 인증 미사용
- AuthorizedKeysFile: 등록된 공개키를 찾을 경로
- Subsystem sftp: SFTP 기능을 ssh와 함께 제공
1
2
Restart-Service sshd
만약 재시작에 실패한다면 sshd_config 파일에 오타가 있을 가능성이 크므로 다시 점검해야 한다.
4. CLI에서 Sftp클라이언트의 공개키 기반 접속 테스트 ** 여기까지 sshd를 설치했고 로그인 방식을 지정했으며, 또 실행 중인 상태라면 sftp 서버를 시작해볼 수 있다.
다음 명령어로 시작한다.
1
sftp $env:USERNAME@localhost
공개키 passphrase 인증은 하기로 설정해놨으므로 입력해서 통과해야 sftp 서버에 접속할 수 있다.
- 프로토콜: SFTP
- 호스트: localhost
- 포트: 22
- 사용자: Windows 사용자 계정명
- 비밀번호: 비워도 됨
그 다음 “고급” 버튼을 눌러 “SSH → 인증” 탭으로 이동한다.
여기서 “Private key file” 항목에 다음 경로를 지정한다:
1
C:\Users\유저\.ssh\id_rsa
또는,
1
C:\Users\유저\.ssh\id_rsa.ppk
- ssh-keygen -p -m PEM -f ~/.ssh/id_rsa 명령으로 구버전(PEM) 포맷으로 변환하거나
- PuTTYgen으로 .ppk 형식으로 변환해 사용한다.
6. 결과 요약
이번 실습을 통해 공개키 기반으로 WinSCP에서 비밀번호 없이 안정적으로 SFTP 접속이 가능함을 확인했다. OpenSSH 서버를 Windows에서 직접 구동하고, .ssh/authorized_keys 방식의 보안 인증을 적용하는 흐름은 리눅스 서버에서도 동일하게 활용 가능하다.
powershell에서 입력하는 명령어들을 순서대로 정리하자면 다음과 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# ssh 폴더 생성
mkdir $env:USERPROFILE\.ssh
# SSH 키 쌍 생성
ssh-keygen -t rsa -b 2048 -f "$env:USERPROFILE\.ssh\id_rsa"
# ssh 폴더 내 키 생성 확인
dir $env:USERPROFILE\.ssh
# sftp 인증을 위한 공개키 등록 (서버 측 authorized_keys)
type "$env:USERPROFILE\.ssh\id_rsa.pub" >> "$env:USERPROFILE\.ssh\authorized_keys"
# 기본 sshd_config 파일(C:\ProgramData\ssh\sshd_config)을 생성하는 PowerShell 명령어.
@"
# 기본 SSH 설정 (공개키 인증 허용)
Port 22
Protocol 2
HostKey __PROGRAMDATA__\\ssh\\ssh_host_rsa_key
HostKey __PROGRAMDATA__\\ssh\\ssh_host_ecdsa_key
HostKey __PROGRAMDATA__\\ssh\\ssh_host_ed25519_key
AuthenticationMethods publickey
PasswordAuthentication no
AuthorizedKeysFile .ssh/authorized_keys
Subsystem sftp sftp-server.exe
"@ | Out-File -Encoding ascii -FilePath "$env:ProgramData\ssh\sshd_config"
# sshd_config 파일 생성 확인
dir "C:\ProgramData\ssh"
# sshd 서비스 (재)시작, 상태 확인
Start-Service sshd
Restart-Service sshd
Get-Service sshd
# 공개키 인증 sftp 로그인
sftp $env:USERNAME@localhost
사용을 완료했으면 서버를 닫아주세요. ^-^
1
2
Stop-Service sshd
Get-Service sshd
- sshd_config 설정 오류가 나면 서비스가 아예 재시작되지 않으므로 신중히 작성해야 한다.
- 공개키 인증을 적용하면 자동화에 적합하고, 비밀번호 노출 위험도 낮출 수 있다.
- WinSCP는 GUI로 설정하기 쉽지만 OpenSSH 신형 키를 바로 인식하지 못할 수 있으므로 포맷에 주의한다.
💡다음 단계: 더 안전한 사용자 격리와 대안적 접근
이번 실습에서는 Windows 내장 OpenSSH Server를 통해 SFTP 서버를 비교적 간단히 구축하고, WinSCP를 활용해 공개키 기반으로 안전하게 접속하는 방법까지 알아봤습니다.
그러나 실제 사용 중 C, D, F 등의 전체 드라이브가 WinSCP 상에서 그대로 보이는 것을 확인하며, 현재 설정이 단일 사용자 테스트 환경에는 적합하지만, 보안상 완전하다고는 보기 어려움을 느낄 수 있었습니다.
- Windows OpenSSH의 ChrootDirectory 설정 실습:
- Python 기반 asyncssh 서버 직접 구축 및 루트 경로 제한 실험:
- Docker 환경에서 독립적인 SFTP 컨테이너 구성:
#SFTP #SSH #OpenSSH #공개키인증 #passphrase #인증방식 #암호화통신 ** **#Windows11 #PowerShell #WindowsOpenSSH #관리자권한 #Windows서비스 ** **#WinSCP #PuTTYgen #sshd #sshkeygen #DISM #SetService #RestartService ** **#id_rsa #authorized_keys #sshd_config #ChrootDirectory #ProgramData #Windows파일시스템 ** **#asyncssh #PythonSFTP #루트디렉토리제한 #DockerSFTP #보안격리 #서버운영실습 ** **
- 추가) 이번 포스팅을 따라오셨다면 정말 고생이 많으셨습니다. ㅠㅠㅠㅠ 다음 포스팅에서는 도커를 활용해서 10분도 안되어 격리된 환경에서 sftp 서버를 구축하는 방법을 다루었습니다. 관심 있으신 분은 참고해주세요. https://blog.naver.com/devramyun/223832074832
[20250414] 🐳 Docker로 10분 만에 SFTP 서버 만들기 (공개키 인증) 최근에 로컬 Windows 환경에서 OpenSSH를 설치하고 설정하는 데 꽤 많은 단계를 거쳤습니다. https://… 최근에 로컬 Windows 환경에서 OpenSSH를 설치하고 설정하는 데 꽤 많은 단계를 거쳤습니다. https://…













