윈도우 SSH 키 생성 방법, Linux 서버에 공개키 등록하는 방법

SSH 접속할 때마다 비밀번호를 입력하다가 자동화 스크립트가 막히거나, 보안 정책상 비밀번호 인증을 꺼야 하는 상황이 생깁니다. 키 기반 인증으로 전환하면 이 두 가지를 한 번에 해결할 수 있는데, 처음 설정할 때 공개키 등록 위치나 권한 설정에서 한 번씩 막히는 경우가 많습니다. 이 글에서 Windows ssh-keygen 사용법부터 Linux 서버 등록까지 전 과정을 순서대로 정리합니다.

Windows 10 이상에서는 OpenSSH가 기본 내장되어 있어 별도 설치 없이 ssh-keygen을 바로 사용할 수 있습니다. 생성된 공개키를 Linux 서버의 ~/.ssh/authorized_keys에 등록하면 비밀번호 없이 키 인증으로 접속이 가능해집니다. 권한 설정(chmod 700 / 600)이 틀리면 키 인증이 작동하지 않으니 반드시 확인해야 합니다.

사전 확인 — OpenSSH 설치 여부

Windows 10 버전 1809 이상, Windows 11이라면 OpenSSH 클라이언트가 기본 포함되어 있습니다. 먼저 설치 여부부터 확인합니다.

PowerShell을 관리자 권한으로 열고 아래 명령어를 입력합니다.

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

State가 Installed로 표시되면 바로 사용 가능합니다. NotInstalled 상태라면 아래 명령어로 설치합니다.

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

설치 후 PowerShell 또는 CMD에서 ssh -V를 입력해 버전이 출력되면 준비 완료입니다. 실무에서 보면, 기업 환경에서 그룹 정책으로 OpenSSH 설치가 막혀 있는 경우가 간혹 있습니다. 그럴 땐 IT 관리자에게 확인하거나 PuTTYgen을 대안으로 쓸 수 있습니다.

Windows PowerShell에서 Get-WindowsCapability 명령어로 OpenSSH 설치 여부를 확인하는 화면, SSH 키 생성 전 환경 점검 목적
Installed 가 표시되면 바로 ssh-keygen 사용이 가능합니다

ssh-keygen으로 키 쌍 생성

PowerShell 또는 CMD 아무 곳에서나 아래 명령어를 입력합니다.

ssh-keygen -t ed25519 -C "your_email@example.com"

알고리즘을 ed25519로 지정하는 이유가 있습니다. 과거에는 RSA 4096이 표준이었는데, ed25519는 키 길이가 짧으면서도 보안 강도가 높고 서명 속도가 빠릅니다. 레거시 시스템 호환이 필요한 경우에만 RSA를 씁니다.

레거시 환경이라면 아래를 사용합니다.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

명령어 실행 후 순서대로 입력값을 받습니다.

  1. 저장 경로 — 기본값은 C:\Users\계정명\.ssh\id_ed25519입니다. 그냥 Enter를 누르면 기본 경로에 저장됩니다. 여러 서버에 다른 키를 쓸 경우에만 이름을 바꿉니다.
  2. 패스프레이즈(Passphrase) — 키 파일 자체에 걸 비밀번호입니다. 비워두면 키 파일만 있으면 바로 접속됩니다. 보안이 중요한 환경이라면 설정하는 게 맞고, 자동화 스크립트에 쓸 거라면 비워두는 경우가 많습니다.

생성이 완료되면 두 개의 파일이 만들어집니다.

파일명역할공유 여부
id_ed25519개인키 (Private Key)절대 외부 공유 금지
id_ed25519.pub공개키 (Public Key)서버에 등록하는 파일

이건 직접 겪어보면 체감되는데, 처음 하는 분들이 가장 많이 헷갈리는 부분이 바로 여기입니다. .pub 파일만 서버에 올립니다. 개인키는 로컬에만 있어야 합니다.

Windows PowerShell에서 ssh-keygen 명령어 실행 후 키 저장 경로와 패스프레이즈 입력 단계가 순서대로 표시된 화면, 키 쌍 생성 과정 안내 목적
Enter 세 번으로 기본 설정 완료 — 생성된 파일은 C:\Users\계정명\.ssh\ 폴더에 저장됩니다

공개키를 Linux 서버에 등록

방법은 두 가지입니다. 상황에 맞게 선택하면 됩니다.

방법 1 — ssh-copy-id 사용 (Linux/Mac 권장, Windows에서도 가능)

Windows OpenSSH에는 ssh-copy-id가 기본 포함되어 있지 않습니다. Git Bash가 설치되어 있다면 Git Bash에서 아래 명령어를 사용할 수 있습니다.

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@서버IP

이 명령어가 자동으로 서버의 ~/.ssh/authorized_keys에 공개키를 추가하고 권한도 맞춰줍니다. 한 줄로 끝나는 가장 빠른 방법입니다.

방법 2 — 수동 등록 (PowerShell/CMD에서 직접)

Git Bash가 없거나 방법 1이 안 되는 환경에서는 아래 순서로 수동 등록합니다.

Step 1. Windows에서 공개키 내용 확인

type C:\Users\계정명\.ssh\id_ed25519.pub

출력된 내용 전체를 복사합니다. ssh-ed25519 AAAA...로 시작하는 한 줄 전체입니다.

Step 2. Linux 서버에 비밀번호로 접속

ssh user@서버IP

Step 3. authorized_keys에 공개키 추가

mkdir -p ~/.ssh
echo "복사한_공개키_전체내용" >> ~/.ssh/authorized_keys

또는 PowerShell에서 원격 명령으로 한 번에 처리하는 방법도 있습니다.

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@서버IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

많이들 여기서 막히더라고요 — echo 입력할 때 공개키 중간에 줄바꿈이 들어가는 경우입니다. authorized_keys는 키 하나가 반드시 한 줄이어야 작동합니다. 붙여넣기 전에 줄바꿈 없이 한 줄인지 꼭 확인하세요.

Linux 서버 터미널에서 .ssh 디렉토리를 생성하고 authorized_keys 파일에 공개키를 추가하는 명령어 실행 화면, 공개키 수동 등록 절차 안내 목적
echo 명령어로 공개키를 추가할 때 >> 연산자를 써야 기존 키가 삭제되지 않습니다 (> 는 덮어쓰기)

권한 설정 및 SSH 데몬 확인

이 부분이 핵심입니다. 공개키를 올려도 권한이 틀리면 SSH 데몬이 키 인증을 거부합니다. 에러 메시지 없이 그냥 비밀번호를 계속 요청하는 경우의 80% 이상이 권한 문제입니다.

Linux 서버에서 아래 명령어로 권한을 맞춥니다.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

소유자도 확인합니다.

ls -la ~/.ssh/

.ssh 디렉토리와 authorized_keys 파일의 소유자가 현재 로그인한 계정과 일치해야 합니다. root로 복사했다가 소유자가 root로 남아있는 경우가 가끔 있습니다.

chown -R user:user ~/.ssh

sshd_config 설정도 확인합니다.

sudo grep -E "PubkeyAuthentication|AuthorizedKeysFile" /etc/ssh/sshd_config

아래 두 줄이 활성화되어 있어야 합니다.

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

값이 no이거나 주석 처리되어 있다면 수정 후 SSH 데몬을 재시작합니다.

sudo systemctl restart sshd

인증 방식 비교 — 비밀번호 vs 키 기반

항목비밀번호 인증키 기반 인증
보안 강도브루트포스 공격에 취약개인키 없이는 접속 불가
자동화 스크립트비밀번호 하드코딩 필요키 파일로 무인 접속 가능
접속 편의성매번 입력 필요패스프레이즈 없으면 바로 접속
분실 시 대응비밀번호 재설정authorized_keys에서 해당 키 삭제
다중 서버 관리서버마다 비밀번호 관리 필요키 하나로 여러 서버 등록 가능
감사(Audit) 추적계정 단위키 단위로 세분화 가능

실전 팁: 키 등록 후에도 비밀번호 인증을 완전히 끄고 싶다면 /etc/ssh/sshd_config에서 PasswordAuthentication no로 변경합니다. 단, 키 인증이 정상 작동하는 것을 먼저 확인한 뒤에 변경해야 합니다. 순서가 바뀌면 서버에 접속 자체가 불가능해집니다.

흔한 오해와 트러블슈팅

“키를 등록했는데 아직도 비밀번호를 묻는다”

체크 순서는 이렇습니다. 권한(chmod 700 / 600) → sshd_config PubkeyAuthentication yes → authorized_keys 파일에 키가 실제로 한 줄로 들어가 있는지 → 소유자 일치 여부. 실무에서 보면 authorized_keys 파일 안에 줄바꿈이 들어가서 키가 두 줄로 깨져 있는 경우가 제일 많습니다.

“공개키와 개인키 둘 다 서버에 올려야 하는 것 아닌가?”

아닙니다. 서버에는 .pub 파일(공개키)만 등록합니다. 개인키는 로컬 머신에만 존재해야 하며, 서버로 복사하는 순간 키 기반 인증의 보안 전제가 무너집니다.

“여러 PC에서 같은 서버에 접속하려면 키를 공유해야 하나?”

권장하지 않습니다. PC마다 별도 키를 생성하고 각각의 공개키를 서버 authorized_keys에 줄 단위로 추가하는 게 맞습니다. 그래야 특정 PC를 폐기할 때 해당 키 줄만 삭제하면 됩니다.

SSH 접속 시 -v 옵션으로 디버깅하기

키 인증이 어디서 실패하는지 확인할 때 아래 명령어가 유용합니다.

ssh -v user@서버IP

출력 로그에서 Offering public keyServer accepts key 흐름이 보이면 정상입니다. Permission denied (publickey)가 나오면 권한이나 authorized_keys 내용을 다시 확인합니다.


지금 당장 할 것 하나: PowerShell에서 ssh-keygen -t ed25519 실행 → 기본 경로로 저장 → .pub 파일 내용 확인까지만 먼저 해보세요. 여기까지 2분이면 됩니다.

키 등록 후 비밀번호 인증을 완전히 비활성화했을 때 예상치 못한 이슈가 생긴 경험이 있다면 댓글로 공유해주세요. 어떤 상황에서 어떻게 해결했는지 구체적으로 남겨주시면 다른 분들에게도 도움이 됩니다.

여러 서버에 각각 다른 키를 관리하고 있다면 ~/.ssh/config 파일을 어떻게 구성하고 있는지도 궁금합니다.

다음으로 읽으면 좋은 글:
~/.ssh/config 설정 방법 — 서버별 키, 포트, 유저 관리 한 파일로 정리하기
SSH 보안 강화 설정 — PasswordAuthentication 비활성화, 포트 변경, Fail2ban 적용

본 포스팅은 정보 전달 목적이며, 실제 적용 시 발생하는 책임은 사용자에게 있습니다.

댓글 남기기