리눅스 서버 SSH 키 인증(key) 로그인 설정 방법

안녕하세요. 비전 IDC 기술팀입니다.

SSH 키 인증은 비밀번호 대신 한 쌍의 암호화 키(개인 키와 공개 키)로 서버에 로그인하는 방식입니다. 서버에는 공개 키만 등록하고, 개인 키는 접속하는 PC에만 보관하므로 비밀번호 추측이나 무차별 대입 공격으로 로그인될 위험을 크게 줄일 수 있습니다. 또한 백업 스크립트나 rsync 동기화처럼 사람이 비밀번호를 입력할 수 없는 자동화 작업에도 널리 사용됩니다.

이 문서에서는 Ed25519 키 생성, ssh-copy-id를 이용한 공개 키 등록, 수동 등록 시 올바른 권한 설정, 키 로그인 테스트, 그리고 테스트가 끝난 뒤 비밀번호 로그인을 비활성화하는 방법까지 CentOS와 Ubuntu 서버를 기준으로 설명합니다.

적용 환경

  • 서버: CentOS 7, Rocky Linux / AlmaLinux 8·9, Ubuntu 20.04 / 22.04 / 24.04 (OpenSSH 서버)
  • 클라이언트: Linux, macOS, Windows 10/11의 OpenSSH 클라이언트 (PuTTY 사용자는 별도 문서 참고)
  • 권장 키 유형: Ed25519 (오래된 시스템과 호환이 필요하면 RSA 3072/4096비트)
  • SSH 서비스명: CentOS·Rocky·AlmaLinux는 sshd, Ubuntu는 ssh
  • 공개 키 등록 파일: 접속 계정의 ~/.ssh/authorized_keys

1. SSH 키 인증 동작 방식

  • 개인 키(예: ~/.ssh/id_ed25519): 접속하는 PC에만 보관하며 절대 외부에 공유하지 않습니다.
  • 공개 키(예: ~/.ssh/id_ed25519.pub): 서버 계정의 ~/.ssh/authorized_keys 파일에 한 줄로 등록합니다. 공개 키는 노출되어도 로그인에 사용할 수 없습니다.

접속 시 서버는 등록된 공개 키로 클라이언트가 해당 개인 키를 가지고 있는지 검증합니다. 개인 키 자체는 네트워크로 전송되지 않습니다. 키는 계정 단위로 등록되므로 root와 일반 계정에 각각 사용하려면 각 계정의 홈 디렉터리에 따로 등록해야 합니다.

2. 클라이언트에서 키 생성 (ssh-keygen)

접속에 사용할 PC(또는 다른 서버를 접속하는 서버)에서 키를 생성합니다. Linux, macOS의 터미널과 Windows 10/11의 PowerShell에서 같은 명령을 사용할 수 있습니다.

ssh-keygen -t ed25519 -C "admin@my-pc"

-C 뒤의 값은 키를 구분하기 위한 설명(주석)이며 자유롭게 지정할 수 있습니다. 실행하면 다음 순서로 질문이 표시됩니다.

  1. 저장 위치: Enter를 누르면 기본 경로(~/.ssh/id_ed25519)에 저장됩니다. 이미 같은 이름의 키가 있다면 덮어쓰지 않도록 주의합니다.
  2. 암호(passphrase): 개인 키 파일을 보호하는 암호입니다. 설정해 두면 개인 키 파일이 유출되더라도 암호 없이는 사용할 수 없으므로, 사람이 직접 접속하는 용도라면 설정을 권장합니다. 무인 자동화 작업용 키는 용도를 제한해 별도로 만듭니다.

생성된 파일을 확인합니다.

ls -l ~/.ssh/
cat ~/.ssh/id_ed25519.pub

id_ed25519는 개인 키, id_ed25519.pub는 공개 키입니다. 공개 키는 ssh-ed25519 AAAA... admin@my-pc 형식의 한 줄로 되어 있습니다.

3. ssh-copy-id로 공개 키 등록

현재 서버에 비밀번호로 로그인할 수 있다면 ssh-copy-id로 공개 키를 가장 간단하고 안전하게 등록할 수 있습니다. 서버의 ~/.ssh 디렉터리와 authorized_keys 파일이 없으면 만들고, 공개 키를 추가합니다.

ssh-copy-id -i ~/.ssh/id_ed25519.pub 사용자명@서버IP

SSH 포트를 변경한 서버라면 포트를 지정합니다.

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 사용자명@서버IP

서버 계정의 비밀번호를 한 번 입력하면 등록이 완료되고, 등록된 키 개수와 함께 접속 테스트 방법이 안내됩니다.

4. 공개 키를 수동으로 등록하는 방법

ssh-copy-id를 사용할 수 없다면 공개 키 내용을 복사해 서버에 직접 추가합니다. 먼저 클라이언트에서 공개 키 한 줄을 복사합니다.

cat ~/.ssh/id_ed25519.pub

서버에 키를 등록할 계정으로 로그인한 뒤 다음 명령을 실행합니다. 따옴표 안의 내용은 실제 공개 키 전체 한 줄로 바꿔 입력합니다.

mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo 'ssh-ed25519 AAAA...공개키_전체... admin@my-pc' >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

root 권한으로 다른 계정에 키를 등록하는 경우

root로 작업하면서 다른 계정(예: deploy)에 키를 등록한다면 파일 소유자를 해당 계정으로 바꿔야 합니다. 소유자가 root로 남아 있으면 키 인증이 거부됩니다.

mkdir -p /home/deploy/.ssh
vi /home/deploy/.ssh/authorized_keys
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
chown -R deploy:deploy /home/deploy/.ssh

권한 요구 사항 정리

sshd는 기본적으로 StrictModes가 활성화되어 있어, 다른 사용자가 수정할 수 있는 권한이면 키 파일을 신뢰하지 않고 키 인증을 거부합니다.

SSH 키 관련 권장 권한
대상 권장 권한 소유자
홈 디렉터리 (~) 그룹·기타 사용자 쓰기 권한 없음 (예: 700 또는 755) 해당 계정
~/.ssh 700 해당 계정
~/.ssh/authorized_keys 600 해당 계정
클라이언트의 개인 키 (~/.ssh/id_ed25519) 600 사용자 본인

CentOS에서 SELinux 컨텍스트 복원

SELinux가 활성화된 CentOS·Rocky·AlmaLinux에서 .ssh 디렉터리를 수동으로 만들었거나 다른 위치에서 복사해 왔다면 보안 컨텍스트가 맞지 않아 키 인증이 거부될 수 있습니다. 다음 명령으로 기본 컨텍스트를 복원합니다.

restorecon -Rv ~/.ssh

5. 키 로그인 테스트

기존 SSH 세션은 닫지 말고 새 터미널에서 접속을 시도합니다.

ssh -i ~/.ssh/id_ed25519 사용자명@서버IP

키에 암호를 설정했다면 키 암호를 묻는 메시지(Enter passphrase for key)가 표시됩니다. 서버 계정 비밀번호를 묻지 않고 로그인되면 키 인증이 정상적으로 동작하는 것입니다.

인증 과정을 자세히 확인하려면 -v 옵션을 사용합니다.

ssh -v -i ~/.ssh/id_ed25519 사용자명@서버IP

출력에서 Offering public key 다음에 Server accepts key가 표시되고 Authenticated ... using "publickey"로 끝나면 키로 인증된 것입니다.

접속 설정을 간단하게 저장하기 (선택)

클라이언트의 ~/.ssh/config에 접속 정보를 저장하면 짧은 이름으로 접속할 수 있습니다. 값은 예시이므로 실제 환경에 맞게 수정합니다.

Host web01
    HostName 203.0.113.10
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_ed25519
chmod 600 ~/.ssh/config
ssh web01

6. 비밀번호 로그인 비활성화

모든 관리 계정에서 키 로그인이 정상 동작하는 것을 확인했다면, 비밀번호 로그인을 막아 무차별 대입 공격을 원천적으로 차단할 수 있습니다. 이 단계 역시 콘솔 접속 수단(VPS의 VNC·웹 콘솔, 단독서버의 KVM/IPMI)을 확인한 상태에서 진행합니다.

sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d)
sudo vi /etc/ssh/sshd_config

다음 항목을 찾아 값을 설정합니다. 주석(#) 처리되어 있다면 주석을 해제합니다.

PubkeyAuthentication yes
PasswordAuthentication no

root 계정은 키로만 로그인하도록 제한하려면 다음 설정을 함께 사용할 수 있습니다. root 직접 로그인을 완전히 막으려면 no로 설정합니다.

PermitRootLogin prohibit-password

Ubuntu의 추가 설정 파일 확인

Ubuntu 20.04 이후 버전의 기본 sshd_config는 파일 앞부분의 Include 지시어로 /etc/ssh/sshd_config.d/ 디렉터리의 .conf 파일을 먼저 읽어 들입니다. sshd는 같은 항목이 여러 번 나오면 처음 읽은 값을 사용하므로, 이 디렉터리의 파일(예: 클라우드 이미지가 만든 설정)에 PasswordAuthentication yes가 있으면 본 파일의 설정이 적용되지 않습니다.

sudo grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ 2>/dev/null

충돌하는 값이 있다면 해당 파일의 값도 no로 수정합니다.

문법 검사와 적용

변경 후 문법을 검사하고 실제로 적용될 값을 확인합니다.

sudo sshd -t
sudo sshd -T | grep -Ei '^(passwordauthentication|pubkeyauthentication|permitrootlogin)'

검사를 통과했다면 SSH 서비스를 재시작합니다. 서비스 이름은 배포판에 따라 다릅니다.

# CentOS 7, Rocky Linux, AlmaLinux
sudo systemctl restart sshd

# Ubuntu
sudo systemctl restart ssh

마지막으로 새 터미널에서 키 로그인이 되는지, 그리고 키 없이 접속하면 비밀번호를 묻지 않고 거부되는지 확인합니다.

ssh -o PubkeyAuthentication=no 사용자명@서버IP

Permission denied (publickey)가 표시되면 비밀번호 로그인이 정상적으로 차단된 것입니다.

7. 자주 발생하는 문제와 확인 방법

SSH 키 인증 문제 점검
증상 가능한 원인 확인 및 해결 방향
키를 등록했는데 계속 비밀번호를 물어봄 권한·소유자 오류, 다른 계정에 등록, 공개 키 줄 깨짐 ls -ld ~ ~/.ssh ~/.ssh/authorized_keys로 권한을 확인하고, 접속 계정과 키를 등록한 계정이 같은지 확인합니다.
CentOS에서 권한은 맞는데 키 인증 실패 SELinux 보안 컨텍스트 불일치 restorecon -Rv ~/.ssh를 실행합니다.
Permission denied (publickey) 비밀번호 인증이 꺼진 상태에서 올바른 키를 사용하지 않음 ssh -v로 어떤 키를 제시하는지 확인하고 -i로 올바른 개인 키를 지정합니다.
UNPROTECTED PRIVATE KEY FILE! 경고 클라이언트 개인 키 권한이 너무 넓음 chmod 600 ~/.ssh/id_ed25519로 권한을 줄입니다.
비밀번호 비활성화 후에도 비밀번호 로그인이 됨 sshd_config.d의 설정이 우선 적용되거나 재시작 누락 sshd -T 결과에서 실제 적용 값을 확인하고 서비스를 재시작합니다.
Host key verification failed 서버 재설치 등으로 호스트 키 변경 원인을 확인한 뒤 클라이언트의 known_hosts에서 해당 항목을 정리합니다.

서버 쪽 인증 로그에서 거부 사유를 확인할 수 있습니다.

# CentOS 7, Rocky Linux, AlmaLinux
sudo tail -n 50 /var/log/secure

# Ubuntu
sudo journalctl -u ssh -n 50 --no-pager

Authentication refused: bad ownership or modes 같은 메시지가 있다면 권한 문제입니다. 해결되지 않으면 비전 IDC 1:1 문의(https://visionidc.com/submitticket.php) 또는 텔레그램 VISIONIDC24로 문의해 주시기 바랍니다.

8. 관련 기술자료와 공식 참고자료

관련 비전 IDC 기술자료

공식 참고자료

9. 자주 묻는 질문

개인 키를 여러 PC에서 복사해 사용해도 되나요?

가능은 하지만 권장하지 않습니다. PC마다 별도의 키를 만들어 각각 등록하면, 한 PC를 분실했을 때 authorized_keys에서 해당 키 한 줄만 삭제해 접근을 차단할 수 있습니다.

등록한 키를 삭제하려면 어떻게 하나요?

서버 계정의 ~/.ssh/authorized_keys를 열어 해당 공개 키 줄을 삭제하면 됩니다. 키 끝의 주석(-C로 지정한 값)으로 어떤 키인지 구분할 수 있으므로 키를 만들 때 알아보기 쉬운 주석을 붙이는 것이 좋습니다.

키 암호(passphrase)를 매번 입력하기 번거롭습니다.

ssh-agent에 키를 등록하면 세션 동안 한 번만 암호를 입력하면 됩니다. Linux·macOS에서는 ssh-add ~/.ssh/id_ed25519를 사용하고, PuTTY 사용자는 Pageant를 사용할 수 있습니다.

개인 키를 잃어버렸는데 비밀번호 로그인도 막아 두었습니다.

SSH로는 접속할 수 없으므로 VPS의 VNC·웹 콘솔 또는 단독서버의 KVM/IPMI로 로그인해 새 공개 키를 등록하거나 임시로 비밀번호 인증을 허용해야 합니다. 콘솔 사용이 어렵다면 비전 IDC 기술지원에 문의해 주십시오.

마무리

이번 문서에서는 ssh-keygen으로 Ed25519 키를 만들고, ssh-copy-id 또는 수동 방식으로 authorized_keys에 공개 키를 등록한 뒤, 키 로그인을 확인하고 비밀번호 로그인을 비활성화하는 과정을 살펴봤습니다.

키 인증 문제의 대부분은 ~/.ssh 700, authorized_keys 600 권한과 소유자 설정에서 발생합니다. 설정 변경은 항상 기존 세션을 유지한 채 새 세션으로 확인하는 순서를 지키시기 바랍니다.

  • 0 사용자에게 유용한 정보 제공
이 답변이 도움이 되었나요?
« Back