# OpenPubkey SSH (OPKSSH) 오픈소스 공개 - SSH와 통합된 싱글 사인온 시스템

> Clean Markdown view of GeekNews topic #19986. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19986](https://news.hada.io/topic?id=19986)
- GeekNews Markdown: [https://news.hada.io/topic/19986.md](https://news.hada.io/topic/19986.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-27T09:56:29+09:00
- Updated: 2025-03-27T09:56:29+09:00
- Original source: [blog.cloudflare.com](https://blog.cloudflare.com/open-sourcing-openpubkey-ssh-opkssh-integrating-single-sign-on-with-ssh/)
- Points: 10
- Comments: 1

## Summary

Cloudflare는 OPKSSH(OpenPubkey SSH)를 오픈소스로 공개하여 OpenID Connect 기반의 SSO 로그인으로 SSH 키를 자동 생성 및 사용하게 해줍니다. OPKSSH는 SSH 프로토콜을 수정하지 않고도 ID 기반 접근 방식을 도입할 수 있으며, 사용자는 SSH 공개키/비공개키를 직접 관리할 필요가 없어 사용자 편의성과 보안성을 향상시킵니다. OPKSSH는 Apache 2.0 라이선스로 GitHub에 공개되어 있으며, 자동 설치 스크립트와 개선된 구성 도구를 포함하여 실사용 가능한 SSH 기능을 제공합니다.

## Topic Body

- Cloudflare는 OPKSSH(OpenPubkey SSH)를 오픈소스로 공개함  
- OPKSSH는 OpenID Connect 기반 SSO 로그인으로 SSH 키를 자동으로 생성 및 사용하게 해줌  
- 사용자는 더 이상 SSH 공개키/비공개키를 직접 관리하거나 서버에 배포할 필요가 없음  
- SSH 프로토콜을 수정하지 않고도 SSH 인증에 ID 기반 접근 방식 도입 가능  
  
### SSO와 OpenID Connect 배경 설명  
- SSO(Single Sign-On)는 사용자가 한 번 로그인하면 여러 시스템에 접근할 수 있도록 하는 인증 방식  
- OpenID Connect는 SSO에 주로 사용되는 프로토콜로, 사용자 정보가 담긴 ID 토큰 발급  
- ID 토큰은 사용자 이메일 등 정보는 담지만, 공개키는 포함하지 않음 → SSH와 같은 보안 프로토콜에는 바로 사용 불가능  
  
### OpenPubkey 소개  
- OpenPubkey는 ID 토큰에 사용자 공개키를 포함시켜 PK Token으로 만들어줌  
- 이를 통해 “Google이 alice@example.com 사용자가 공개키 0x123을 사용 중”이라고 인증할 수 있음  
- 기존 OpenID Connect 프로토콜에 변경 없이 적용 가능함  
  
### OPKSSH의 역할과 장점  
- OPKSSH는 OpenPubkey를 SSH에 통합하여 SSO 로그인을 통해 일회용 SSH 키를 생성함  
- 기존 SSH 프로토콜에 변경 없이 작동하며, 설정 파일에 두 줄만 추가하면 적용 가능  
- # 보안성 향상  
  - 장기 키 대신 일회용 SSH 키 사용 → 키 유출 시 피해를 줄이고 키 수명 제한 가능  
  - 기본적으로 24시간 만료, 설정으로 변경 가능  
- # 사용자 편의성 향상  
  - `opkssh login` 명령어 실행만으로 SSH 키 생성 및 로그인 가능  
  - SSH 비공개키를 여러 컴퓨터에 복사할 필요 없음  
- # 관리 가시성 향상  
  - 키 기반 접근 대신 이메일 주소 기반 → 사용자가 누구인지 명확히 추적 가능  
  - `bob@example.com` 같은 이메일을 접근 허용 파일에 추가하면 바로 접근 가능  
  
### OPKSSH 작동 방식  
- 사용자가 `opkssh login` 실행 시:  
  - 임시 SSH 공개키/비공개키 생성  
  - 브라우저로 OpenID Provider(Google 등)에 로그인  
  - 성공 시, OpenPubkey 프로토콜을 통해 공개키와 사용자 신원을 담은 PK Token 생성  
  - `.ssh` 디렉토리에 PK Token 포함된 공개키 파일과 비공개키 파일 저장  
- SSH 연결 시:  
  - SSH 클라이언트가 PK Token 포함된 공개키를 SSH 서버로 전송  
  - 서버는 `AuthorizedKeysCommand`로 설정된 OpenPubkey verifier를 통해 공개키 유효성 검사  
  - PK Token이 유효하고, 이메일이 접근 허용 목록에 있으면 접속 승인  
  
### 기술적 문제 해결  
- **PK Token 전송**: SSH 인증서의 확장 필드를 이용해 PK Token을 SSH 공개키에 포함시킴  
- **서버에서 유효성 검사**: `AuthorizedKeysCommand`를 이용해 공개키의 유효성 검사를 커스텀 프로그램(OpenPubkey verifier)로 위임  
- **공개키 일치성 검증**: SSH 세션을 보호하는 공개키가 PK Token 내의 키와 일치하는지 확인  
  
### 오픈소스화와 그 의미  
  
- OPKSSH는 Apache 2.0 라이선스로 [GitHub](https://github.com/openpubkey/opkssh)에 공개됨  
- 이전에는 프로토타입 수준이었으나, 이제는 완전한 SSH 기능으로 안정적인 릴리즈 제공  
- Cloudflare는 이를 유지하거나 보증하지 않지만, OpenPubkey 커뮤니티에 코드 기부함  
  
### 주요 개선 사항  
- 실사용 가능한 SSH 기능 추가  
- 자동 설치 스크립트 제공  
- 개선된 구성 도구 포함

## Comments



### Comment 36400

- Author: neo
- Created: 2025-03-27T09:56:29+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43470906) 
* SSH 인증서가 오래전부터 존재해왔으며, 자체 SSH CA를 만들어 단기 인증서를 발급받을 수 있음
  - 인증서를 자동으로 받기 위한 다양한 옵션이 있으며, 그 중 하나가 step-ca 프로젝트임
  - step-ca는 OAUTH/OIDC 시스템과 클라우드 제공자와 통신할 수 있음
  - 상업적 솔루션도 존재함
* SSH CA와 하드웨어를 사용하는 방법을 선호함
  - SSHD에서 타사 코드를 호출할 필요가 없어 공격 표면과 벡터를 최소화할 수 있음
  - 키 유출이나 재사용 공격을 완전히 방지할 수 있음
  - 기본 ssh-keygen 명령어로 모든 것을 수행할 수 있어 관리자의 관점에서 유리함
* ID 토큰이 사용자 공개 키를 포함하지 않아 SSH 프로토콜을 직접 보호할 수 없다는 주장에 의문을 가짐
  - SSH 인증은 반드시 키 기반일 필요가 없음
  - GSSAPI를 통해 구현할 수 있었을지 궁금함
* Teleport를 사용하여 인증서 기반 SSH 인증을 수행하며, SSO 인증으로 단기 인증서를 발급받음
  - 접근 제어와 감사 로그의 이점이 있음
* Terminalwire라는 SSH 대안을 개발 중임
  - 개발자 워크스테이션에서 SaaS에 대한 일회성 명령 실행에 적합함
  - 서버에서 클라이언트로 stdio를 스트리밍하는 SSH와 유사하지만 추가 명령을 제공함
* Userify의 SSH 키 기술과 비교함
  - Userify는 분산된 일반 키를 사용하며, 중앙 제어 평면만 중앙 집중화함
  - 인증 서버가 오프라인일 때도 서버에 로그인할 수 있음
  - 사용자 세션을 종료하고 계정을 삭제하는 기능이 있음
* 블로그 게시물의 작성자이자 opkssh의 주요 기여자로서 질문에 답변할 준비가 되어 있음
* OIDC를 지원하는 SSH CA를 운영하는 것과의 차이점을 알기 어려움
  - 서버는 CA의 키만 신뢰하면 됨
* X.509 인증서 CA를 지원하는 OpenSSH 포크가 있음
  - 공개 키를 토큰으로 반환하는 표준과 이를 사용하여 SSH에 로그인하는 서버 측 인증 바이너리가 혁신적인 것으로 제시된 점이 재미있다고 생각함
