← 전체 글로 돌아가기

웹 개발

SSH로 외부에서 접속이 안 될 때

안에서는 되는데 밖에서만 SSH가 안 붙는 상황. 포트부터 방화벽까지 끊어서 확인한 순서를 적었다.

외부에서 SSH 접속이 안 될 때는 원인이 여러 층에 걸쳐 있다. sshd가 안 떠 있거나, 포트가 막혔거나, 방화벽이 끊거나, 심지어 디스크가 꽉 차서 로그인이 안 되기도 한다. 그래서 한 가지만 보지 말고 안쪽부터 바깥쪽으로 끊어서 확인한다.

sshd가 떠서 듣고 있는지

먼저 서버 안에서 sshd가 실제로 포트를 듣는지 본다.

sudo ss -lntp | grep ssh

여기서 22번(또는 변경한 포트)이 LISTEN으로 안 보이면 서비스 문제다. sudo systemctl status sshsudo journalctl -u ssh -n 80으로 왜 안 떴는지 본다. 설정 파일 오타로 sshd가 기동에 실패하는 경우가 흔하다.

디스크부터 한 번 본다

의외로 디스크가 꽉 차면 로그인 단계에서 막힌다. 습관적으로 확인한다.

df -h

방화벽과 포트

서비스가 정상인데 밖에서만 안 붙으면 그 사이의 방화벽을 본다.

sudo ufw status

포트가 허용돼 있는지, 클라우드라면 보안 그룹 같은 외부 방화벽도 같이 확인한다. 안에서 ssh localhost는 되는데 밖에서 안 되면 거의 이 구간이다.

정상 상태를 정해두고 비교

같은 증상이 또 나면 헤매지 않으려고, 정상일 때의 ss 출력과 방화벽 규칙을 적어둔다. 다음엔 "지금 값이 그때와 어디가 다른가"만 보면 되니 훨씬 빠르다.