웹 개발
SSH 외부 접속 문제를 안전하게 해결하는 법
서버에 SSH로 못 들어가면 포트부터 권한까지 단계적으로 확인하되, 실수로 자신도 못 들어가는 상황을 피해야 한다.
SSH 접속이 안 되면 서버 전체가 손에서 벗어나는 것 같은 느낌이 든다. 하지만 침착함을 잃지 말고 차근차근 확인하면 된다. 대신 한 번에 하나씩만 바꿔서 자신까지 접속 불가 상태가 되는 걸 피해야 한다.
포트가 정말 열려 있는지 확인하기
SSH 포트가 방화벽에 막혀 있는 건 아닌지, 아니면 sshd 데몬 자체가 그 포트에서 듣고 있지 않은 건 아닌지부터 확인해야 한다. 이미 접속되어 있는 컨테이너나 다른 서버에서 확인하자.
# 어떤 포트가 열려 있는지 확인
sudo ss -lntp
# 특정 포트에 접속 시도
telnet example.com 22
sshd 설정이 문법적으로 맞는지 확인하기
SSH 설정 파일(/etc/ssh/sshd_config)을 직접 수정했다면, 문법 오류가 있는지 꼭 확인해야 한다. 문법 오류가 있으면 데몬이 시작 안 되고, 원격 접속은 불가능하다.
# 설정 문법 확인 (적용하지는 않음)
sudo sshd -t
# 문제가 있으면 상세히 보기
sudo sshd -t -d
로그를 꼭 확인해보기
실제로 접속 시도는 들어오고 있는데 거부당하는 건지, 아니면 포트 자체에 닿지 않는 건지 로그를 봐야 안다.
# SSH 관련 로그 확인
sudo journalctl -u ssh -n 50
# 또는 syslog에서
sudo tail -f /var/log/auth.log
권한 문제인지 확인하기
홈 디렉토리나 .ssh 디렉토리의 권한이 틀리면 SSH 키 인증이 작동 안 할 수 있다. 안타깝게도 이런 오류는 로그에 명시적으로 안 나타날 수도 있다.
# 권한 재설정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/id_rsa.pub
변경 전에 항상 백업하기
SSH 설정을 바꾸기 전에 항상 원본을 백업해두자. 실수로 자신까지 접속 불가 상태가 되면, 콘솔 접근권이 없는 한 나중에 물리적으로 서버에 가야 한다.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
설정을 바꾼 후 확인 창을 열어두기
SSH 설정을 수정한 후 다시 로드해도, 현재 세션은 끊기지 않는다. 그 상태에서 새로운 창으로 접속 시도를 해서 되는지 확인해보자. 안 된다면 기존 창이 열려 있는 동안 되돌릴 수 있다.