피드로 돌아가기
"not a valid OPENSSH private key file" — building a compat layer for seven SSH private-key formats
Dev.toDev.to
Security

7종 SSH 키 포맷 통합을 위한 Detect-Normalize 레이어 설계

"not a valid OPENSSH private key file" — building a compat layer for seven SSH private-key formats

Susumu Takahashi2026년 6월 20일4intermediate

Context

Paramiko 라이브러리의 제한적인 OpenSSH 포맷 지원으로 인한 다양한 SSH 키 파일 인식 실패 문제 발생. 호스팅 제공업체 및 툴마다 상이한 PKCS#8, .ppk 등 다수 포맷 존재에 따른 연결 오류 빈번.

Technical Solution

  • Paramiko 직접 수정 대신 전면에 Detect-Normalize 구조의 Compat Loader 레이어를 삽입한 설계
  • 7가지 포맷(OpenSSH, PKCS#1, SEC 1 EC, PKCS#8, Legacy PEM, PuTTY .ppk)을 식별하는 _detect_format 로직 구현
  • Cryptography 라이브러리를 활용해 인식된 키 객체를 OpenSSH PEM으로 재직렬화하여 Paramiko에 전달
  • 외부 의존성 및 바이너리 크기 증가 방지를 위해 PuTTY .ppk v2/v3 전용 Hand-rolled Parser 자체 구현
  • '유입 데이터-허용 포맷-해결 방법' 3단계 구성을 통한 사용자 중심의 상세 Error Message 체계 구축

- 라이브러리의 제약 사항을 해결할 때 코어 패치보다 전면의 Absorbing Layer 도입 검토 - 외부 라이브러리 추가 전, 기능 범위가 명확한 경우 Hand-rolled Parser를 통한 의존성 최소화 고려 - 에러 메시지 설계 시 단순 상태 보고가 아닌 '현상-기준-액션'을 포함한 가이드라인 제공

원문 읽기