Windows OpenSSH — 등록한 SSH 키가 조용히 무시될 때

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 는 읽지 않는다
그 파일에 넣었는데도 안 된다icaclsSYSTEM·Administrators 외 권한이 있으면 거부. /inheritance:r 로 상속을 끊는다
로그인은 되는데 남의 서버 접근이 안 된다klist 에서 Cache Flags: 0x4 -> S4U 확인. 키 인증 세션의 구조적 한계다
그래도 바깥 인증이 필요하다SYSTEM 예약 작업으로 우회 (컴퓨터 계정 권한임을 감안)

이 서버를 세우는 과정은 평가판 ISO 함정 글에, 이 S4U 제약을 실제로 만난 현장은 CIFS 도메인 조인 글에 있습니다.

참고 문서OpenSSH Server configuration for Windows (Microsoft Learn)

댓글 남기기