Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Windows 10/Server 2019에서 SSH 키 기반 인증 구성하는 방법

이 글에서는 Windows에서 RSA 키를 이용한 SSH 인증을 구성하여 원격 서버나 컴퓨터에 안전하게 접속하는 방법을 다룹니다. Windows에서 RSA 키(인증서)를 생성하는 방법과 Windows 10/Windows Server 2019에 내장된 OpenSSH 서버에서 키 기반 인증을 설정하는 과정을 단계별로 살펴봅니다. 키 기반 인증을 사용하면 비밀번호 없이 원격 호스트에 인증할 수 있습니다.

SSH 키 기반 인증은 Linux 환경에서는 널리 사용되어 왔지만, Windows에서는 비교적 최근에 도입된 기능입니다. 기본 원리는 클라이언트의 공개 키를 SSH 서버에 미리 등록해 두고, 클라이언트가 접속을 시도할 때 서버가 해당 클라이언트가 일치하는 개인 키를 보유하고 있는지 확인하는 방식입니다.

Windows에서 SSH(RSA) 키 생성하기

OpenSSH가 실행 중인 원격 Windows 서버에 접속할 클라이언트 컴퓨터에서 RSA 키 쌍(공개 키와 개인 키)을 생성해야 합니다. 개인 키는 클라이언트 측에만 보관하며(절대 다른 사람에게 전달하면 안 됩니다!), 공개 키는 SSH 서버의 authorized_keys 파일에 추가합니다. Windows 클라이언트에서 RSA 키를 생성하려면 먼저 OpenSSH 클라이언트를 설치해야 합니다.

Windows 10 1809(이상)와 Windows Server 2019에서는 OpenSSH 클라이언트가 별도의 선택적 기능으로 제공됩니다. PowerShell을 관리자 권한으로 실행한 후 다음 명령어로 설치할 수 있습니다:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

이전 버전의 Windows에서는 GitHub에서 배포되는 Win32-OpenSSH 포트를 설치하면 됩니다(Windows에서 SFTP 서버를 구성하는 방법을 다룬 글의 예시를 참고하세요).

일반(관리자 권한 없는) PowerShell 세션을 실행하고 다음 명령어로 RSA 2048비트 키 쌍을 생성합니다:

ssh-keygen

개인 키를 보호할 암호(passphrase)를 입력하라는 메시지가 표시됩니다. 암호를 지정하면 이 키로 SSH 인증을 사용할 때마다 해당 암호를 입력해야 합니다. 여기서는 설명을 위해 암호를 입력하지 않았습니다(보안상으로는 암호 설정이 권장됩니다).

ssh-keygen은 현재 Windows 사용자 프로필(C:\Users\사용자이름)에 .ssh 디렉터리를 생성하고 다음 두 개의 파일을 만듭니다:

  • id_rsa – 개인 키
  • id_rsa.pub – 공개 키

RSA 키 생성 후에는 개인 키를 SSH Agent 서비스에 등록하면 편리하게 개인 키를 관리하며 인증에 사용할 수 있습니다. SSH Agent는 개인 키를 저장하고 현재 사용자의 보안 컨텍스트에서 이를 제공합니다. PowerShell의 서비스 관리 명령으로 ssh-agent 서비스를 시작하고 자동 시작되도록 설정합니다:

set-service ssh-agent StartupType 'Automatic'
Start-Service ssh-agent

개인 키를 ssh-agent 데이터베이스에 추가합니다:

ssh-add "C:\Users\youruser\.ssh\id_rsa"

또는 다음과 같이 입력할 수도 있습니다:

ssh-add.exe $ENV:UserProfile\.ssh\id_rsa

SSH 키 인증을 위한 Windows OpenSSH 서버 구성

이제 클라이언트에서 생성한 공개 키를 SSH 서버로 복사합니다(이 예시에서는 OpenSSH가 구성된 Windows 10 1903 원격 컴퓨터를 사용합니다). Windows에서 OpenSSH 서버를 구성하는 자세한 방법은 이전 글에서 다룬 적이 있습니다.

id_rsa.pub 파일을 SSH 서버 접속에 사용할 사용자 프로필의 .ssh 디렉터리로 복사합니다. 예를 들어 Windows 10에 admin 사용자가 있다면 C:\Users\admin\.ssh\authorized_keys로 키를 복사해야 합니다.

SCP를 사용해 공개 키를 SSH 서버로 복사할 수도 있습니다:

scp C:\Users\youruser\.ssh\id_rsa.pub admin@192.168.1.15:c:\users\admin\.ssh\authorized_keys

이제 비밀번호 없이 Windows SSH 서버에 접속할 수 있습니다. 개인 키에 암호(passphrase)를 설정하지 않았다면 원격 Windows 호스트에 자동으로 연결됩니다.

기본 SSH 클라이언트로 원격 호스트에 접속하려면 다음 명령어 형식을 사용합니다:

ssh (사용자이름)@(SSH 서버 이름 또는 IP 주소)

예를 들면 다음과 같습니다:

ssh admin@192.168.1.15

이 명령은 IP 주소가 192.168.1.15인 원격 SSH 서버에 admin 계정으로 접속하겠다는 의미입니다. SSH Agent가 이전에 저장한 개인 키를 자동으로 사용해 인증을 시도합니다.

ssh-agent 서비스를 사용하지 않고 SSH 키를 관리하고 싶다면, 인증에 사용할 개인 키 파일의 경로를 직접 지정할 수 있습니다:

ssh admin@192.168.1.15 -i "C:\Users\youruser\.ssh\id_rsa"

RSA 키로 SSH 서버에 접속하지 못하고 계속 비밀번호를 요구한다면, 접속하려는 사용자 계정이 로컬 관리자 그룹(그룹 SID: S-1-5-32-544)의 구성원일 가능성이 높습니다. 이에 대해서는 아래에서 자세히 설명합니다.

로컬 관리자 계정으로 SSH 키를 사용해 Windows에 로그인하는 방법

OpenSSH는 Windows 로컬 관리자 권한을 가진 사용자를 위해 별도의 키 기반 접근 설정을 사용합니다.

먼저 사용자 프로필의 authorized_keys 파일 대신 C:\ProgramData\ssh\administrators_authorized_keys 파일을 사용해야 합니다. SSH 키를 이 텍스트 파일에 추가해야 하며, 보안상의 이유로 Administrators 그룹과 SYSTEM만 이 파일을 읽을 수 있는 권한을 가져야 합니다.

사용자 프로필의 authorized_keys 파일을 그대로 사용하고 공개 키 데이터를 administrators_authorized_keys 파일로 옮기지 않으려면, OpenSSH 구성 파일(C:\ProgramData\ssh\sshd_config)에서 관련 줄을 주석 처리하면 됩니다.

다음 두 줄을 주석 처리합니다:
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

sshd_config 파일에서 RSA 키를 사용한 접속을 허용합니다:

PubkeyAuthentication yes

그리고 SSH 비밀번호 로그인을 비활성화합니다:

PasswordAuthentication no

sshd_config 변경 사항을 저장한 후에는 반드시 sshd 서비스를 재시작해야 합니다.

restart-service sshd

또 하나 중요한 사항이 있습니다. 이전 버전의 OpenSSH에서는 authorized_keys 파일에 대한 읽기 권한을 NT Service\sshd에 부여해야 했습니다.

이를 위해 다음 중 하나를 수행해야 합니다:

  • OpenSSHUtils 모듈 설치: Install-Module -Force OpenSSHUtils -Scope AllUsers. 파일 권한을 변경하려면 다음 명령을 실행합니다: Repair-AuthorizedKeyPermission -FilePath C:\Users\admin\.ssh\authorized_keys
  • NTFSSecurity 모듈이나 icacls를 사용해 파일의 NTFS 권한 변경
  • 또는 sshd_config 파일에서 StrictModes를 비활성화합니다. 기본적으로 이 모드는 활성화되어 있으며, 공개 키와 개인 키가 충분히 보호되지 않은 경우 키 기반 인증을 차단합니다. #StrictModes yes 줄의 주석을 제거하고 StrictModes no로 변경합니다.

이로써 Windows에서 RSA 공개 키(인증서)를 사용한 SSH 인증 구성이 완료되었습니다. 이 인증 방식을 활용하면 원격 서버에 안전하게 접속할 수 있을 뿐만 아니라, SSH 터널을 통한 자동 포트 포워딩, 스크립트 실행 등 다양한 자동화 작업도 수행할 수 있습니다.