리눅스 원격접속이 안될 때 해볼 수 있는 몇가지 방법
리눅스 SSH 원격접속 장애를 클라이언트 TCP 확인, sshd 서비스, 설정 문법, 방화벽, 계정 잠금, 공개키 권한, 인증 로그 순서로 분리 진단합니다.
리눅스 서버에 원격 접속이 안 될 때는 SSH 설정만 보지 말고, 클라이언트에서 서버까지의 TCP 연결, 서버의 sshd 상태, 방화벽, 포트 변경, 계정 잠금, 인증 방식, 로그를 순서대로 나눠 확인해야 합니다. 이 순서를 지키면 “서비스 문제인지, 네트워크 문제인지, 인증 문제인지”를 빠르게 분리할 수 있습니다.
클라이언트에서 포트 접근 확인
먼저 접속하는 PC에서 대상 서버의 SSH 포트가 열려 있는지 확인합니다. 포트가 닫혀 있으면 계정이나 키 파일을 보기 전에 네트워크/방화벽부터 봐야 합니다.
ssh -vvv user@server.example.com
nc -vz -w 3 server.example.com 22
timeout 3 bash -c 'cat < /dev/null > /dev/tcp/server.example.com/22' && echo open || echo closed
Connection timed out은 방화벽 드롭, 라우팅, 보안 그룹 문제일 가능성이 큽니다. Connection refused는 서버까지는 도달했지만 해당 포트에서 listen 중인 서비스가 없다는 뜻에 가깝습니다. Permission denied는 네트워크가 아니라 인증 단계 문제입니다.
서버 콘솔에서 SSH 서비스 확인
콘솔, 가상화 플랫폼 화면, 클라우드 serial console 등 다른 경로로 서버에 들어갈 수 있다면 서비스 상태부터 확인합니다. 배포판마다 서비스명이 다릅니다.
# RHEL/CentOS/Rocky/Alma 계열
sudo systemctl status sshd --no-pager
sudo systemctl enable --now sshd
# Ubuntu/Debian 계열
sudo systemctl status ssh --no-pager
sudo systemctl enable --now ssh
서비스가 실패 상태라면 최근 로그를 봅니다.
sudo journalctl -u sshd -n 100 --no-pager
sudo journalctl -u ssh -n 100 --no-pager
sshd 설정 문법 검사
/etc/ssh/sshd_config를 수정한 뒤 문법이 틀리면 sshd가 재시작되지 않을 수 있습니다. 원격 서버에서 SSH 설정을 바꿀 때는 기존 접속 세션을 닫지 말고 새 세션으로 접속 테스트를 먼저 해야 합니다.
sudo sshd -t
sudo sshd -T | egrep '^(port|listenaddress|passwordauthentication|pubkeyauthentication|permitrootlogin|allowusers|denyusers)'
실제 사용 중인 포트는 설정 파일만 보지 말고 listen 상태로 확인합니다.
sudo ss -lntp | grep -E '(:22|sshd)'
grep -Ei '^[[:space:]]*Port[[:space:]]+' /etc/ssh/sshd_config
방화벽 확인
운영 서버에서 바로 iptables -A INPUT ...를 추가하면 재부팅 후 사라지거나 firewalld/nftables 정책과 충돌할 수 있습니다. 현재 사용하는 방화벽 체계를 먼저 확인합니다.
sudo systemctl is-active firewalld || true
sudo ufw status verbose || true
sudo nft list ruleset | sed -n '1,120p'
sudo iptables -S | sed -n '1,120p'
firewalld를 쓰는 서버라면 서비스 단위로 여는 것이 관리하기 쉽습니다.
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
UFW 환경에서는 다음처럼 확인하고 허용합니다.
sudo ufw status numbered
sudo ufw allow 22/tcp
계정과 인증 문제 확인
포트가 열려 있고 sshd도 정상인데 로그인이 안 되면 계정 상태와 인증 방식을 봅니다.
id user
sudo passwd -S user
sudo chage -l user
sudo faillock --user user 2>/dev/null || true
sudo pam_tally2 --user user 2>/dev/null || true
공개키 로그인 문제는 권한 오류가 많습니다. 홈 디렉터리와 .ssh 권한을 확인합니다.
sudo ls -ld /home/user /home/user/.ssh
sudo ls -l /home/user/.ssh/authorized_keys
sudo chmod 700 /home/user/.ssh
sudo chmod 600 /home/user/.ssh/authorized_keys
sudo chown -R user:user /home/user/.ssh
로그에서 실패 사유 보기
인증 실패, AllowUsers 제한, 키 권한 문제, PAM 잠금은 로그에 흔적이 남습니다.
# RHEL 계열
sudo tail -n 100 /var/log/secure
# Ubuntu/Debian 계열
sudo tail -n 100 /var/log/auth.log
# systemd journal 공통
sudo journalctl -u sshd -S -30min --no-pager
sudo journalctl -u ssh -S -30min --no-pager
원격 설정 변경 시 안전 순서
SSH는 잘못 건드리면 바로 접속 경로를 잃을 수 있습니다. 설정 변경 전 현재 세션을 유지하고, 문법 검사 후 reload만 먼저 수행하고, 다른 터미널에서 새 접속이 되는지 확인한 뒤 기존 세션을 종료합니다.
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d_%H%M%S)
sudo sshd -t
sudo systemctl reload sshd || sudo systemctl reload ssh
ssh -p 22 user@server.example.com
정리하면 타임아웃은 네트워크/방화벽, 거부는 서비스/listen, 인증 실패는 계정/키/PAM/log 순서로 보면 됩니다. 이 세 갈래만 분리해도 리눅스 원격접속 장애의 대부분은 원인 범위를 빠르게 좁힐 수 있습니다.