1. 문제 상황: PuTTY는 잘 되는데 왜 WinSCP만 거부당할까?
리눅스 서버 인프라를 운영하거나 AWS EC2 인스턴스를 관리할 때, 터미널 접속용 PuTTY와 파일 전송용 WinSCP는 엔지니어의 필수 콤비 도구입니다. 대다수 엔지니어는 PuTTYgen으로 생성한 하나의 .ppk 개인키 파일을 두 프로그램에 동일하게 등록하여 사용합니다.
그런데 최근 다음과 같은 기이한 현상으로 삽질을 겪는 엔지니어들이 급증했습니다:
[동일한 서버 IP, 동일한 포트(22), 동일한 사용자(ubuntu), 동일한 .ppk 파일]
- PuTTY 접속 시도: ──▶ 로그인 성공! (터미널 쉘 정상 진입)
- WinSCP 접속 시도: ──▶ 접속 실패! (서버가 키를 거부하였습니다)
PuTTY 세션을 그대로 가져와서 열었는데도 WinSCP에서만 에러가 뿜어져 나오면, 처음에는 리눅스 서버의 ~/.ssh/authorized_keys 권한 문제나 sshd_config 설정을 의심하며 수 시간 동안 엉뚱한 서버 설정만 뒤집어엎게 됩니다.
이번 포스팅에서는 PuTTY는 접속되는데 WinSCP는 실패하는 정확한 기술적 원인(PPK v3 포맷 변경)과, 서버를 건드리지 않고 1분 만에 해결하는 3가지 실전 솔루션을 완벽히 정리합니다.
2. 발생 에러 메시지와 증상
WinSCP에서 세션 연결을 시도하면 다음과 같은 팝업과 로그가 출력되며 인증이 즉각 중단됩니다:
- 팝업 오류:
서버가 키를 거부하였습니다.(Server rejected our key) - 추가 상세 메시지:
인증에 실패했습니다./No supported authentication methods available (server sent: publickey) - WinSCP 내부 로그:
Disconnected: No supported authentication methods available
서버가 공개키를 거부했다고 표시되지만, 실상은 WinSCP가 서버로 키를 온전히 전달조차 하지 못하고 클라이언트 단에서 파싱 실패를 일으킨 것입니다.
3. 근본적인 기술 원인: PPK v2 vs PPK v3 포맷 변경
이 문제의 본질은 서버나 네트워크 설정이 아닌 PuTTYgen 0.75 버전부터 도입된 ‘PPK 버전 3 (PPK v3)’ 포맷 호환성 문제입니다.
PPK3 --> PuTTY["PuTTY 최신 버전: 정상 파싱 & 로그인 성공!"]
PPK3 -.-> WinSCP_Old["구버전 WinSCP (< 5.19 / 5.21): PPK v3 해석 불가!"]
WinSCP_Old --> Err["'서버가 키를 거부하였습니다' 에러 발생"]
style PPK3 fill:#ffebee,stroke:#c62828
style WinSCP_Old fill:#fff3e0,stroke:#e65100
PPK 버전별 기술 스펙 비교
| 구분 | 레거시 PPK Version 2 | 모던 PPK Version 3 |
|---|---|---|
| 도입 시기 | PuTTY 0.74 및 그 이전 버전 | PuTTY 0.75 (2021년) 이후 기본값 |
| 키 파일 첫 줄 | PuTTY-User-Key-File-2: ... |
PuTTY-User-Key-File-3: ... |
| 암호화 KDF | SHA-1 기반 해시 (취약점 존재) | Argon2id (최신 양자/GPU 무차별 대입 방어) |
| MAC 무결성 검증 | HMAC-SHA-1 | HMAC-SHA-256 |
| 구버전 WinSCP 지원 | 100% 완벽 호환 | 버전 5.19 미만에서 인식 불가 (키 거부) |
과거의 PPK v2는 키 보호 암호화에 SHA-1을 사용하여 최신 보안 표준에 미달했습니다. 따라서 PuTTY 팀은 0.75 버전부터 암호학적으로 안전한 Argon2id를 적용한 PPK v3를 기본 포맷으로 강제 전환했습니다.
하지만 많은 사용자가 PuTTY는 최신 버전을 쓰면서도, WinSCP는 몇 년 전에 설치된 구버전(5.17, 5.15 등)을 그대로 유지하다 보니 구버전 WinSCP가 PPK v3 키를 해석하지 못해 서버에 거부당하는 현상이 발생하는 것입니다.
4. 해결 방법 3가지 (상황별 선택)
해결책 1. WinSCP 최신 버전으로 업데이트 (가장 권장)
가장 근본적이고 깔끔한 해결책입니다. WinSCP 최신 버전(5.21 또는 6.x 이상)은 PPK v3 포맷을 공식적으로 완벽 지원합니다.
- WinSCP 공식 다운로드 페이지에 접속합니다.
- 최신 릴리즈(WinSCP 6.x 이상) 설치 파일을 다운로드하여 업데이트 설치를 진행합니다.
- 업데이트 후 WinSCP를 재실행하고 기존
.ppk키를 그대로 지정하여 접속하면 즉시 정상 로그인됩니다.
해결책 2. PuTTYgen에서 PPK v2 포맷으로 다운그레이드 저장
폐쇄망 환경이나 사내 정책상 WinSCP 프로그램을 즉시 업데이트하기 어려운 경우, 키 파일의 저장 포맷을 PPK v2로 변경하여 저장할 수 있습니다.
- **PuTTYgen(PuTTY Key Generator)**을 실행합니다.
File➔Load private key를 클릭하여 접속이 안 되던 문제의.ppk파일을 불러옵니다.- 상단 메뉴에서 **
Key➔Parameters for saving key files...**를 클릭합니다. - 팝업창 하단의
PPK file version:라디오 버튼에서 기본값3대신 **2**를 선택합니다. - 암호화 알고리즘을 확인하고
OK를 누른 뒤,Save private key를 클릭하여my-key-v2.ppk라는 새 이름으로 저장합니다. - 메모장으로 새 키 파일을 열어 첫 번째 줄이
PuTTY-User-Key-File-2:로 시작하는지 확인합니다. - 구버전 WinSCP에 이
my-key-v2.ppk를 지정하면 아무런 에러 없이 즉시 접속됩니다.
해결책 3. 표준 OpenSSH 개인키 포맷으로 변환하여 사용
특정 도구에 종속되지 않는 범용 표준 PEM 포맷으로 변환하여 사용하는 방법입니다.
PuTTYgen GUI 사용 시:
Conversions➔Export OpenSSH key메뉴를 선택하여id_rsa파일로 내보냅니다.
리눅스/macOS CLI 사용 시:
# putty-tools 패키지 설치 후 CLI로 변환
puttygen my-key.ppk -O private-openssh -o ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
WinSCP는 OpenSSH 표준 포맷 키도 자체적으로 로드할 수 있으므로 호환성 문제에서 완전히 자유로워집니다.
5. 확인해 볼 필요 없는 부분 (시간 낭비 방지 체크리스트)
이 에러를 마주했을 때 다음 항목들은 절대 건드릴 필요가 없습니다:
- 서버의
~/.ssh/authorized_keys: PuTTY로 이미 로그인이 된다면 서버의 공개키 등록 상태는 100% 정상입니다. sshd_config파일:PubkeyAuthentication이나 포트 번호 설정은 무죄입니다.- 방화벽 및 보안 그룹(Security Group): 22번 포트가 열려 있으니 PuTTY 터미널이 열리는 것입니다.
- 리눅스 계정 비밀번호 / 사용자 권한: 클라이언트 도구의 키 포맷 파싱 에러이므로 계정과는 무관합니다.
6. 결론
“PuTTY는 되는데 WinSCP는 안 된다"는 현상은 서버 장애가 아니라, PuTTYgen 0.75+의 PPK v3 포맷 도입과 구버전 WinSCP 간의 전형적인 버전 파편화 이슈였습니다.
가장 좋은 예방책은 보안 도구들을 정기적으로 최신 버전으로 유지하는 것이며, 업데이트가 제한적인 환경이라면 PuTTYgen의 Key Parameters 메뉴에서 PPK 버전을 2로 지정하여 손쉽게 호환성을 확보하시기 바랍니다.