OS 기술/Linux

SSH 호스트키 변경 경고 & Private Key 권한 오류 해결 가이드

DongT 2025. 8. 13. 23:28
728x90
반응형

 



SSH 접속 중 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 경고와 UNPROTECTED PRIVATE KEY FILE! 오류가 발생했음. 본 문서는 원인과 조치 절차를 순서대로 정리했음. 

증상

$ ssh -i sshkey_prd_pri.key opc@10.10.21.12
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
...
Offending ED25519 key in /home/opc/.ssh/known_hosts:1
Host key verification failed.
$ ssh -i sshkey_prd_pri.key opc@10.10.21.12
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'sshkey_prd_pri.key' are too open.
...

원인분석

  • 호스트키 변경: 대상 서버의 SSH Host Key가 재생성되었거나, 동일 IP로 다른 인스턴스가 기동되었음. 희귀하게는 중간자 공격 가능성도 존재함.
  • 개인키 권한 과다: 개인키 파일 권한이 0644 등으로 과도하게 개방되어 SSH 클라이언트가 키를 무시함.

조치방법

1) 대상 서버 변경 여부 확인함

클라우드 콘솔(OCI 등)에서 해당 IP의 인스턴스가 정상 교체/재배포되었는지 확인함. 정당한 변경이 맞을 때만 다음 단계 진행함.

2) known_hosts 에서 기존 호스트키 제거 후 재학습함

# 특정 IP 기록 제거
ssh-keygen -R 10.10.21.12

# 재접속하여 새 핑거프린트 확인 및 신뢰 여부 선택
ssh -i sshkey_prd_pri.key opc@10.10.21.12
# Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

팁: 최초 접속 시 표시되는 SHA256 핑거프린트를 콘솔/관리자 기록과 대조하면 더 안전함.

3) 개인키 파일 권한 교정함

# 최소 권한으로 설정 (둘 중 하나)
chmod 400 sshkey_prd_pri.key
# 또는
chmod 600 sshkey_prd_pri.key

# 소유권 확인/교정(필요 시)
chown $(whoami):$(id -gn) sshkey_prd_pri.key

# SSH 디렉터리 권고 권한
chmod 700 ~/.ssh
chmod 600 ~/.ssh/known_hosts

예상 결과값: 이후 동일 키 권한 경고가 더 이상 출력되지 않음.

4) 공개키 일치 여부 점검함

# 로컬 개인키로 공개키 출력
ssh-keygen -y -f sshkey_prd_pri.key > sshkey_prd_pri.pub
cat sshkey_prd_pri.pub

# 서버에서 authorized_keys 와 비교(접속 불가 시 시리얼/콘솔 이용)
sudo su - opc
mkdir -p ~/.ssh && chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys   # 공개키 한 줄 추가/교체
chmod 600 ~/.ssh/authorized_keys
chown opc:opc ~/.ssh ~/.ssh/authorized_keys

예상 결과값: ssh -i ... 접속 시 Permission denied 없이 로그인됨.

5) 계정 이미지 매칭 확인함

  • Oracle Linux 기본 계정: opc
  • Ubuntu: ubuntu
  • RHEL/CentOS 계열: centos 또는 커스텀임
# 예: Ubuntu 이미지라면
ssh -i sshkey_prd_pri.key ubuntu@10.10.21.12

해결 확인

# 접속 후 기본 확인
whoami
hostname -f
hostnamectl

# 최근 SSH 접속 로그 확인
last -a | head
sudo journalctl -u sshd --since "1 hour ago" | tail -n 50

예상 결과값: 현재 사용자/호스트명이 기대값과 일치하고, SSH 로그에 거부 없이 성공 기록이 확인됨.

사후계획(보안 하드닝)

# 주요 SSH 설정 점검
sudo grep -E '^(PubkeyAuthentication|PasswordAuthentication|PermitRootLogin|ChallengeResponseAuthentication)' /etc/ssh/sshd_config

# 권장 예시
# PubkeyAuthentication yes
# PasswordAuthentication no
# PermitRootLogin prohibit-password
# ChallengeResponseAuthentication no

# 설정 반영
sudo systemctl reload sshd
# SSH 단축 설정(선택)
mkdir -p ~/.ssh && chmod 700 ~/.ssh
cat >> ~/.ssh/config <<'EOF'
Host s3-mig
  HostName 10.10.21.12
  User opc
  IdentityFile ~/sshkey_prd_pri.key
  IdentitiesOnly yes
EOF
chmod 600 ~/.ssh/config

# 이후
ssh s3-mig

디버깅 팁

# 자세한 접속 로그 확인
ssh -vvv -o IdentitiesOnly=yes -i sshkey_prd_pri.key opc@10.10.21.12
# "Offering public key" 후 "Server accepts key"가 보이면 키 인증 흐름 정상임
# "is not accepted" 라면 authorized_keys 불일치/권한 문제 가능성 높음

참고 문서

 

 

 


덤) GPT-5가 되고나서 뭔가 메롱해졌다.



 

728x90