SSH 접속이 안 될 때 나오는 오류는 크게 세 가지입니다. 오류 메시지를 먼저 확인하면 원인을 빠르게 좁힐 수 있습니다.
| 오류 메시지 | 원인 |
|---|---|
Connection refused | SSH 데몬 미실행 또는 방화벽이 포트 차단 |
Connection timed out | 방화벽이 패킷 자체를 드롭 (응답 없음) |
Permission denied (publickey) | 키 불일치, authorized_keys 권한 문제 |
Host key verification failed | 서버 fingerprint 변경 (재설치 등) |
1. Connection refused — SSH 데몬 확인
# 서버에 다른 방법으로 접근 후 실행 (콘솔/VNC)
sudo systemctl status ssh # Ubuntu/Debian
sudo systemctl status sshd # CentOS/RHEL
# 중지 상태라면 시작
sudo systemctl start ssh
sudo systemctl enable ssh
# 실제 리스닝 포트 확인
sudo ss -tlnp | grep ssh
# 예상 출력: LISTEN 0 128 0.0.0.0:22 ...SSH 데몬이 실행 중인데 refused가 뜬다면 포트가 22가 아닐 수 있습니다.
sudo sshd -T | grep port 로 실제 포트를 확인하세요.
2. Connection refused / timed out — 방화벽 확인
# UFW (Ubuntu 기본)
sudo ufw status
# SSH 허용 안 되어 있으면
sudo ufw allow ssh # 22번 포트
# firewalld (CentOS/RHEL)
sudo firewall-cmd --list-services
sudo firewall-cmd --add-service=ssh --permanent && sudo firewall-cmd --reload
# iptables 직접 확인
sudo iptables -L INPUT -n | grep 22클라우드 보안 그룹 확인
AWS, GCP, Azure 사용 중이라면 인스턴스 보안 그룹/방화벽 규칙에서 인바운드 TCP 22번이 열려 있는지 확인하세요. OS 방화벽보다 클라우드 레벨 규칙이 먼저 적용됩니다.
# 내 공인 IP 확인 (보안 그룹에 등록할 때)
curl -s ifconfig.me3. Permission denied (publickey) — 키 인증 실패
원인 1: 잘못된 키 파일 지정
# -i 로 키 파일 명시
ssh -i ~/.ssh/id_ed25519 user@서버IP
# 어떤 키를 시도하는지 verbose로 확인
ssh -vvv user@서버IP 2>&1 | grep "Offering|Trying|identity"원인 2: authorized_keys 권한 문제
# 서버에서 실행
ls -la ~/.ssh/
# .ssh 디렉터리: 700, authorized_keys: 600 이어야 함
# 잘못된 경우 수정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 소유자 확인 (root 소유면 안 됨)
ls -la ~/.ssh/authorized_keys
# 올바른 예: -rw------- 1 deploy deploy ...원인 3: 공개키가 등록되지 않음
# 내 공개키 확인
cat ~/.ssh/id_ed25519.pub
# 서버의 authorized_keys 확인
cat ~/.ssh/authorized_keys
# 공개키 등록
echo "공개키_한줄_전체" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys원인 4: sshd_config 에서 키 인증 비활성화
sudo grep -E "PubkeyAuthentication|AuthorizedKeysFile" /etc/ssh/sshd_config
# PubkeyAuthentication yes 이어야 함
# 설정 변경 후 반드시 재시작
sudo systemctl reload ssh4. Host key verification failed — fingerprint 불일치
서버를 재설치하거나 IP가 재할당되면 나타납니다.
# 에러 메시지
# WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
# known_hosts 에서 해당 항목 삭제
ssh-keygen -R 서버IP
# 또는 특정 라인만 삭제
ssh-keygen -R [서버IP]:22
# 이후 재접속 시 yes 입력
ssh user@서버IP정말 재설치한 서버가 맞다면 안전합니다. 그러나 예상치 못한 fingerprint 변경은 MITM 공격 가능성이 있으므로 확인 후 삭제하세요.
5. 빠른 진단 체크리스트
# 로컬에서 실행 — 순서대로 확인
ssh -v user@서버IP 2>&1 | head -30 # verbose 로그
telnet 서버IP 22 # 포트 연결 테스트
curl -v telnet://서버IP:22 # telnet 없을 때 대안
nc -zv 서버IP 22 # netcat 포트 확인# 서버에서 실행 (콘솔 접근 가능한 경우)
sudo systemctl is-active ssh # 데몬 상태
sudo ss -tlnp | grep :22 # 포트 리스닝
sudo ufw status # 방화벽
sudo tail -20 /var/log/auth.log # 인증 로그 (Ubuntu)
sudo tail -20 /var/log/secure # 인증 로그 (CentOS)정리
| 증상 | 확인 순서 |
|---|---|
| Connection refused | ① SSH 데몬 실행 → ② OS 방화벽 → ③ 클라우드 보안 그룹 |
| Connection timed out | ① 클라우드 보안 그룹 → ② OS 방화벽 (DROP 규칙) |
| Permission denied (publickey) | ① 키 파일 경로 → ② .ssh 권한 → ③ authorized_keys 등록 → ④ sshd_config |
| Host key failed | ssh-keygen -R 서버IP 후 재접속 |
자주 묻는 질문 (FAQ)
Q. SSH connection refused와 timed out은 어떻게 다른가요? A. refused는 서버까지 패킷은 도달했지만 22번 포트에서 거절된 것(=SSH 데몬 미실행 또는 포트 차단)이고, timed out은 패킷이 아예 도달하지 못한 것(=방화벽/보안그룹 DROP 또는 잘못된 IP)입니다. refused면 데몬·OS 방화벽을, timed out이면 클라우드 보안 그룹을 먼저 확인하세요.
Q. 데몬은 켜져 있는데 계속 connection refused가 납니다.
A. 포트가 22가 아니거나(sshd_config의 Port), sshd가 특정 IP에만 바인딩(ListenAddress)됐을 수 있습니다. 서버에서 sudo ss -tlnp | grep sshd로 실제 리스닝 주소·포트를 확인하세요.
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.