Windows OpenSSH에 리눅스에서 하던 대로 공개키를 등록하면, 관리자 계정에서는 조용히 무시됩니다. 에러도 없고 로그인도 안 됩니다. ~/.ssh/authorized_keys 를 몇 번을 다시 만들어도 비밀번호만 물어봅니다.
이 글은 그 원인 파일 하나와, 통과한 뒤에 만나는 두 번째 함정(인증은 됐는데 남의 서버에 못 가는 문제)까지, 이 랩의 Windows Server 2025에서 실측한 그대로 정리한 것입니다.
1. 원인 — 관리자 계정은 다른 파일을 본다
Windows OpenSSH의 sshd_config 기본값에 이런 블록이 있습니다. 랩 서버에서 그대로 읽은 내용입니다.
C:\ProgramData\ssh\sshd_config
AuthorizedKeysFile .ssh/authorized_keys
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Match Group administrators— 계정이 Administrators 그룹이면~/.ssh/authorized_keys가 아니라C:\ProgramData\ssh\administrators_authorized_keys를 봅니다. 홈 폴더에 키를 아무리 넣어도 읽지도 않으니 에러가 날 수가 없습니다. 리눅스 습관 그대로 하면 정확히 이 자리에 빠집니다.
Microsoft 공식 문서에도 이 동작이 명시되어 있습니다. [문서확인] 서버 관리에 쓰는 계정은 대부분 관리자라서, 사실상 Windows 서버에서는 이 파일이 기본이라고 생각하는 편이 맞습니다.
2. 파일만 만들면 끝이 아니다 — ACL
이 파일은 권한도 까다롭습니다. 상속으로 다른 사용자 권한이 붙어 있으면 sshd가 거부합니다. 정상 동작 중인 랩 서버의 실제 ACL은 이 두 줄이 전부입니다.
PS> icacls C:\ProgramData\ssh\administrators_authorized_keys
C:\ProgramData\ssh\administrators_authorized_keys NT AUTHORITY\SYSTEM:(F)
BUILTIN\Administrators:(F)
키 등록부터 권한 정리까지 한 번에 하면 이렇습니다.
# 1) 공개키 추가
PS> Add-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value "ssh-ed25519 AAAA... user@host"
# 2) 상속 제거 + SYSTEM/Administrators 만 남기기
PS> icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant "SYSTEM:F" "BUILTIN\Administrators:F"
3. ⭐ 두 번째 함정 — 로그인은 됐는데 남의 서버에 못 간다
키 인증으로 들어온 SSH 세션에서 다른 서버의 공유 폴더에 접근하면 Access is denied 가 납니다. 같은 계정으로 콘솔에서 하면 되는 일이 SSH에서만 안 됩니다. 세션의 Kerberos 티켓을 보면 이유가 드러납니다.
PS> klist
Cached Tickets: (1)
Server: lab-dc01$ @
Cache Flags: 0x4 -> S4U <-- 이것
SSH 공개키 인증은 비밀번호 없이 로그인을 만들기 위해 S4U(프로토콜 전환) 로그온을 씁니다. 신원은 맞지만 그 신원으로 다른 서버에 인증할 자격 증명이 세션에 없습니다. 그래서 로컬 작업은 전부 되는데, 밖으로 나가는 인증(SMB 공유, 원격 관리)만 실패합니다.
| SSH 키 인증 세션에서 | 가능 여부 |
|---|---|
| 로컬 파일·레지스트리·서비스·이벤트 로그 | ✅ |
| AD 조회·DNS 관리 (그 서버가 DC라면 로컬 작업) | ✅ |
| 다른 서버의 SMB 공유 접근 | ❌ Access is denied |
| 밖으로 나가는 인증이 필요한 모든 작업 | ❌ |
우회는 SYSTEM 권한 예약 작업입니다. SYSTEM은 컴퓨터 계정의 정상 티켓을 갖고 있어서 바깥 인증이 됩니다 — 단 사용자가 아니라 컴퓨터 계정으로 접근하므로, 사용자별 권한을 검증해야 하는 작업에는 부적절합니다.
PS> schtasks /create /tn mytask /tr "powershell -File C:\work\job.ps1" /sc once /st 23:59 /ru SYSTEM /rl HIGHEST /f
PS> schtasks /run /tn mytask
정리 — 점검 순서
| 증상 | 확인 |
|---|---|
| 키를 등록했는데 비밀번호를 물어본다 | 계정이 관리자면 administrators_authorized_keys 를 보는지부터. 홈의 authorized_keys 는 읽지 않는다 |
| 그 파일에 넣었는데도 안 된다 | icacls — SYSTEM·Administrators 외 권한이 있으면 거부. /inheritance:r 로 상속을 끊는다 |
| 로그인은 되는데 남의 서버 접근이 안 된다 | klist 에서 Cache Flags: 0x4 -> S4U 확인. 키 인증 세션의 구조적 한계다 |
| 그래도 바깥 인증이 필요하다 | SYSTEM 예약 작업으로 우회 (컴퓨터 계정 권한임을 감안) |
이 서버를 세우는 과정은 평가판 ISO 함정 글에, 이 S4U 제약을 실제로 만난 현장은 CIFS 도메인 조인 글에 있습니다.
참고 문서 — OpenSSH Server configuration for Windows (Microsoft Learn)


