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 불일치/권한 문제 가능성 높음