SSH 접속 없이 서버 상태를 점검하는 방법
SSH 접속 없이 서버 생존 여부를 확인하는 방법입니다. ping, nc, telnet, curl, DNS, traceroute/mtr 결과를 계층별로 해석하는 기준을 정리했습니다.
서버에 SSH로 접속하지 않고 살아 있는지 확인하려면 한 가지 명령만 보면 안 됩니다. ICMP 응답, TCP 포트, HTTP 응답, DNS, 라우팅 경로가 각각 다른 계층을 의미하기 때문입니다. ping이 실패해도 서버가 살아 있을 수 있고, 포트가 열려 있어도 애플리케이션이 정상이라는 뜻은 아닐 수 있습니다.
계층별 확인 기준
| 확인 | 도구 | 의미 |
|---|---|---|
| ICMP 응답 | ping |
네트워크 경로와 ICMP 허용 여부 |
| TCP 포트 | nc, telnet |
대상 포트가 열려 있고 연결 가능한지 |
| HTTP 상태 | curl |
웹 애플리케이션 또는 프록시 응답 |
| 경로 | traceroute, mtr |
중간 라우팅/방화벽 구간 추정 |
| DNS | dig, nslookup |
도메인이 올바른 IP로 해석되는지 |
ping으로 ICMP 확인
TARGET="192.168.10.10"
ping -c 4 "$TARGET"응답이 오면 최소한 ICMP 왕복 경로는 열려 있다는 뜻입니다. 하지만 서버 방화벽이나 클라우드 보안그룹에서 ICMP를 막아두면 서버가 정상이어도 ping은 실패합니다.
TCP 포트 확인
TARGET="192.168.10.10"
nc -vz "$TARGET" 22
nc -vz "$TARGET" 80
nc -vz "$TARGET" 443succeeded가 나오면 TCP 연결이 성립된 것입니다. refused는 대상까지 도달했지만 서비스가 listen하지 않거나 거부한 것이고, timeout은 중간 방화벽 drop이나 라우팅 문제일 가능성이 큽니다.
telnet도 포트 확인에 사용할 수 있지만, 자동화에는 nc가 더 적합합니다.
telnet 192.168.10.10 80HTTP/HTTPS 서비스 확인
curl -I --connect-timeout 5 http://192.168.10.10/
curl -kI --connect-timeout 5 https://192.168.10.10/웹 서비스는 포트가 열려 있어도 애플리케이션이 500, 502, 503을 반환할 수 있습니다. 이 경우 네트워크는 살아 있지만 웹서버, upstream, DB, 애플리케이션 장애일 수 있습니다.
도메인 기준 확인
DOMAIN="example.com"
dig +short "$DOMAIN"
nslookup "$DOMAIN"
curl -I --connect-timeout 5 "https://$DOMAIN/"IP로는 접속되는데 도메인으로 안 되면 DNS 문제일 수 있습니다. 반대로 DNS는 맞는데 접속이 안 되면 방화벽, 라우팅, 서버 애플리케이션을 봐야 합니다.
경로 확인
traceroute 192.168.10.10
mtr -rw 192.168.10.10중간 hop에서 응답이 없다고 무조건 장애는 아닙니다. 일부 라우터는 ICMP TTL exceeded 응답을 막습니다. 중요한 것은 마지막 목적지까지 도달하는지, 특정 구간 이후 손실이 지속되는지입니다.
간단 점검 스크립트
#!/usr/bin/env bash
set -euo pipefail
TARGET="${1:?usage: $0 <host-or-ip>}"
echo "## DNS"
dig +short "$TARGET" 2>/dev/null || true
echo "## ICMP"
ping -c 3 "$TARGET" || true
echo "## TCP ports"
for port in 22 80 443; do
nc -vz -w 3 "$TARGET" "$port" || true
done
echo "## HTTP"
curl -I --connect-timeout 5 "http://$TARGET/" || true
curl -kI --connect-timeout 5 "https://$TARGET/" || true판단 기준
- ping 실패, TCP 성공: ICMP만 차단된 정상 서버일 수 있습니다.
- ping 성공, TCP 실패: 서버는 살아 있지만 해당 서비스가 down이거나 방화벽에서 포트를 막았을 수 있습니다.
- TCP 성공, HTTP 5xx: 네트워크보다 애플리케이션 또는 upstream 장애 가능성이 큽니다.
- DNS 실패, IP 접속 성공: DNS 레코드나 resolver 문제를 확인합니다.
- 모든 확인 실패: 대상 전원, 라우팅, 방화벽, 보안그룹, 회선 장애를 순서대로 확인합니다.