프로젝트로 돌아가기
Openclaw + SNS 카드뉴스 자동화15 min

오라클 클라우드 Windows 서버 SSH 연동 실전기

Linux에서 Windows로 SSH 연결을 시도하다 Permission denied 벽에 막혔습니다. authorized_keys 위치 문제, 권한 설정, 관리자 계정의 숨겨진 규칙까지 — 실제로 겪은 문제와 해결 과정을 순서대로 정리합니다.

SSH 키 생성 — 처음 만나는 passphrase 질문

Linux 서버에서 Windows 서버 연결용 SSH 키를 만들었습니다.

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_cardnews

그러자 바로 이런 화면이 나왔습니다.

Enter passphrase (empty for no passphrase):

passphrase는 SSH 키에 추가로 거는 암호입니다. 설정하면 키를 쓸 때마다 암호를 입력해야 합니다. 자동화 파이프라인에서는 매번 암호를 입력할 수 없기 때문에 엔터를 두 번 눌러서 빈 passphrase로 설정합니다. 자동화 스크립트에서 키를 쓸 때 아무것도 입력하지 않아도 되는 상태가 됩니다.

키 생성이 완료되면 두 파일이 만들어집니다. ~/.ssh/id_ed25519_cardnews 는 개인키이고, ~/.ssh/id_ed25519_cardnews.pub 는 공개키입니다. Windows 서버에 넣어야 하는 것은 .pub 파일의 내용입니다. 개인키는 절대 밖으로 내보내지 않습니다.

1차 접속 시도 — Permission denied

키를 만들고 바로 접속을 시도했습니다.

ssh -i ~/.ssh/id_ed25519_cardnews reedoc@125.132.162.227 "whoami"

결과는 Permission denied (publickey,keyboard-interactive) 였습니다. 예상된 실패였습니다. 공개키를 Windows 서버에 아직 등록하지 않았기 때문입니다.

Windows 서버 sshd 상태 확인 — 서비스 재시작 오류

Windows 서버에서 OpenSSH 서비스 상태를 확인했습니다.

Get-Service sshd

Running 상태였습니다. 그런데 Restart-Service sshd 명령을 실행하자 오류가 났습니다. "sshd 서비스를 열 수 없습니다"라는 메시지였습니다. 관리자 권한 없이 PowerShell을 열어서 생긴 문제였습니다. Windows에서 서비스를 재시작하려면 반드시 관리자 권한으로 PowerShell을 실행해야 합니다.

관리자 권한 PowerShell에서 다시 확인하자 정상이었습니다.

Get-Service sshd
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'

sshd 서비스 Running, OpenSSH.Server State: Installed. 서비스 자체는 문제없는 상태였습니다.

authorized_keys 등록과 권한 설정

공개키를 Linux에서 복사해서 Windows의 C:\Users\reedoc.ssh\authorized_keys 에 붙여넣었습니다. 그리고 icacls로 권한을 정리했습니다.

icacls "C:\Users\reedoc\.ssh" /inheritance:r
icacls "C:\Users\reedoc\.ssh" /grant reedoc:F
icacls "C:\Users\reedoc\.ssh\authorized_keys" /inheritance:r
icacls "C:\Users\reedoc\.ssh\authorized_keys" /grant reedoc:F
Restart-Service sshd

다시 접속을 시도했습니다. 결과는 여전히 Permission denied였습니다.

디버그 모드로 원인 분석

일반 오류 메시지로는 어디서 막히는지 알 수 없었습니다. -vvv 옵션을 붙여서 상세 로그를 봤습니다.

ssh -vvv -i ~/.ssh/id_ed25519_cardnews reedoc@125.132.162.227 "whoami"

로그에서 핵심 줄이 나왔습니다.

debug1: Offering public key: /root/.ssh/id_ed25519_cardnews ED25519 ...
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,keyboard-interactive

이 로그의 의미는 명확했습니다. Linux가 키를 정상적으로 보냈습니다. 그런데 Windows sshd가 그 키를 받고도 거절했습니다. 키 전송 자체는 성공했는데 인증에서 실패한 것입니다. 즉, 네트워크나 키 파일의 문제가 아니라 Windows sshd가 공개키를 읽는 위치가 다른 문제였습니다.

핵심 원인 — 관리자 계정의 숨겨진 규칙

Windows OpenSSH에는 잘 알려지지 않은 규칙이 있습니다. 로그인 계정이 Administrators 그룹에 속하면 일반 사용자와 다른 경로에서 공개키를 읽습니다.

일반 계정: C:\Users\사용자명.ssh\authorized_keys 관리자 계정: C:\ProgramData\ssh\administrators_authorized_keys

reedoc 계정의 그룹을 확인했습니다.

whoami /groups

결과에 BUILTIN\Administrators 가 있었습니다. 관리자 계정이었습니다. 이것이 원인이었습니다. C:\Users\reedoc.ssh\authorized_keys 에 아무리 공개키를 넣어도 sshd는 C:\ProgramData\ssh\administrators_authorized_keys 를 보고 있었습니다.

administrators_authorized_keys — 메모장으로 열리지 않는다

C:\ProgramData\ssh\administrators_authorized_keys 파일을 메모장으로 열려고 했더니 접근이 거부됐습니다. 시스템 보호 파일이라 일반 편집기로는 열리지 않습니다.

관리자 권한 PowerShell에서 직접 파일을 작성해야 합니다.

@'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA.... root@openclaw-first
'@ | Set-Content -Path "C:\ProgramData\ssh\administrators_authorized_keys" -NoNewline

이 방법으로 메모장 없이 PowerShell에서 직접 파일에 공개키를 씁니다. -NoNewline 옵션을 붙여야 줄바꿈이 추가되지 않습니다. 공개키는 반드시 한 줄이어야 합니다.

기존에 다른 키가 있어서 지우기 싫다면 Add-Content로 추가할 수 있습니다. 하지만 디버깅 중에는 새 키 하나만 남기는 것이 가장 확실합니다.

권한 설정 — Administrators와 SYSTEM 모두 필요

파일을 만들었으면 권한을 설정합니다. 이 파일은 일반 사용자가 읽으면 안 됩니다. Administrators와 SYSTEM만 읽을 수 있어야 OpenSSH가 신뢰합니다.

icacls "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "Administrators:F"
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "SYSTEM:F"
Restart-Service sshd

연결 성공

Linux에서 다시 접속을 시도했습니다.

ssh -i ~/.ssh/id_ed25519_cardnews reedoc@125.132.162.227 "whoami"
desktop-o5q0j8p\reedoc

Windows 서버의 계정명이 돌아왔습니다. Linux에서 Windows로 SSH 연결이 성공했습니다.

문제 해결 체크리스트

Windows OpenSSH 연결이 안 될 때 확인할 순서입니다.

첫째, SSH 키를 보내고 있는지 확인합니다. ssh -vvv 로그에서 "Offering public key" 줄이 나와야 합니다. 안 나오면 -i 옵션이나 키 경로 문제입니다.

둘째, 서버가 키를 받고도 거절하는지 확인합니다. "Offering public key" 다음에 바로 "Authentications that can continue"가 나오면 서버가 키를 거절한 것입니다. 키 내용이나 등록 위치 문제입니다.

셋째, 로그인 계정이 관리자 그룹인지 확인합니다. whoami /groups 에서 BUILTIN\Administrators 가 있으면 authorized_keys 위치가 다릅니다. C:\ProgramData\ssh\administrators_authorized_keys 를 써야 합니다.

넷째, 파일 권한을 확인합니다. administrators_authorized_keys 는 Administrators와 SYSTEM만 접근할 수 있어야 합니다. 다른 계정에 읽기 권한이 있으면 OpenSSH가 보안상 그 파일을 무시합니다.

다섯째, 항상 관리자 권한 PowerShell에서 작업합니다. 서비스 재시작, 권한 설정, 파일 쓰기 모두 일반 PowerShell에서는 권한 오류가 납니다.

리도 프로필

리도 인사이트

기술을 현장 언어로 다시 풀어 쓰는 사람

3D 설계, 광통신 인프라 장비 개발, 글로벌 현장 교육을 19년 넘게 다뤄왔고, 요즘은 AI 자동화, 꿈꾸는 카메라, 실무 채널 운영을 연결해 복잡한 일을 더 쉽게 만드는 방법을 기록하고 있습니다.

다음 대화

읽고 끝내지 말고, 실제 문제로 이어가도 좋습니다.

자동화, 설계, 교육, 콘텐츠 중 무엇이든 지금 필요한 문제부터 같이 정리해볼 수 있습니다.

편하게 문의하기