웹 개발
SSH로 외부에서 접속이 안 될 때
안에서는 되는데 밖에서만 SSH가 안 붙는 상황. 포트부터 방화벽까지 끊어서 확인한 순서를 적었다.
외부에서 SSH 접속이 안 될 때는 원인이 여러 층에 걸쳐 있다. sshd가 안 떠 있거나, 포트가 막혔거나, 방화벽이 끊거나, 심지어 디스크가 꽉 차서 로그인이 안 되기도 한다. 그래서 한 가지만 보지 말고 안쪽부터 바깥쪽으로 끊어서 확인한다.
sshd가 떠서 듣고 있는지
먼저 서버 안에서 sshd가 실제로 포트를 듣는지 본다.
sudo ss -lntp | grep ssh
여기서 22번(또는 변경한 포트)이 LISTEN으로 안 보이면 서비스 문제다. sudo systemctl status ssh와 sudo journalctl -u ssh -n 80으로 왜 안 떴는지 본다. 설정 파일 오타로 sshd가 기동에 실패하는 경우가 흔하다.
디스크부터 한 번 본다
의외로 디스크가 꽉 차면 로그인 단계에서 막힌다. 습관적으로 확인한다.
df -h
방화벽과 포트
서비스가 정상인데 밖에서만 안 붙으면 그 사이의 방화벽을 본다.
sudo ufw status
포트가 허용돼 있는지, 클라우드라면 보안 그룹 같은 외부 방화벽도 같이 확인한다. 안에서 ssh localhost는 되는데 밖에서 안 되면 거의 이 구간이다.
정상 상태를 정해두고 비교
같은 증상이 또 나면 헤매지 않으려고, 정상일 때의 ss 출력과 방화벽 규칙을 적어둔다. 다음엔 "지금 값이 그때와 어디가 다른가"만 보면 되니 훨씬 빠르다.