어느날 갑자기 Open_ssh를 이용한 EC2 접속이 안되는 문제가 발생했다.
에러 메세지는 Port 22: Connection timed out
처음 시도해 본 것은 공식 문서였다.
점점 미궁속으로 빠져드는 문제.
심지어 며칠 전까지는 잘만 되었다는 게 더 쇼크다.
키도 교체해보고, ssh도 재시작해보고 할 수 있는 건 다 해봤다.
그러면서 알게된 건, aws 사이트의 ec2 콘솔을 이용한 접속은 잘 된다는 것.
그리고 내부에서 서버 하나를 돌리고 있었는데, dockerhub나 프론트단과의 연결은 잘 된다는 것.
확실하진 않지만 EC2에는 문제가 없다고 잠정적으로 결론을 내렸다.
EC2에 문제가 없다고 한다면,
할 수 있다는 생각이 들었다.
하지만 딱히 건드린 게 없는걸?
그래도 확인은 해봐야겠으니 남는 컴퓨터로 접속을 해보기로 했다.
만약 해당 실험이 성공한다면 내 컴퓨터 쪽 설정에 문제가 있는 거다.
결과는 동일 에러 발생.
이때도 이것저것 해봤는데 FileZila를 통한 접속은 또 되었다.
Docker hub와의 통신도 문제 없다. 프론트단과도 연결이 된다. FTP 프로토콜도 받는다.
기타 설정 문제는 찾아낼 수가 없다.
주어진 4개의 조건에서 도출해 낸 잠정적 결론은 아무래도 포트 문제인 것 같다는 것이다.
ssh는 22번 포트를 사용하는데 해당 연결만이 거부가 되고 있었다.
바로 검증에 들어갔다.
Github에 ssh를 통한 연결을 설정한다음 접속을 시도해보았다.
결과는 역시 timeout. 여기서 확신을 얻었다.
결과만 이야기 하자면 내 쪽의 22번 포트가 막혀있던 게 문제였다.
현재 이용 중인 ISP가 SK브로드밴드인데, 검색을 조금 해보니 SK브로드밴드는 22번 포트를 막아두고 있다는 듯.
이해가 안 가는 게, 내 쪽 포트가 막혔던 아니던 어차피 이쪽은 아웃바운드 영향을 받을텐데 이게 막힌 게 대체 뭔 상관인가 싶다.
이유가 뭐던 간에 나는 ssh가 22번이 아닌 다른 포트를 사용하게 바꿔주면 그만이다.
EC2 콘솔을 통해 인스턴스에 접속 후,
ls /etc/ssh/sshd_config -l 로 파일의 권한을 확인.
-r--r--r-- 1 root root 3287 Jan 25 06:01 /etc/ssh/sshd_config
쓰기 권한이 없으면 수정이 안되기 때문에 권한을 변경한다.
sudo chmod u+w /etc/ssh/sshd_config
그리고 다시 확인하면,
-rw-r--r-- 1 root root 3287 Jan 25 06:01 /etc/ssh/sshd_config
유저가 root로 되어있기 때문에 sudo vi /etc/ssh/sshd_config로 파일을 연다.
Port 22 를 Port 222로 변경.
그 후, sudo service ssh restart로 재시작을 해준다.
netstat -ant | grep 222로 상태를 확인.
tcp 0 0 0.0.0.0:222 0.0.0.0:* LISTEN
tcp6 0 0 :::222 :::* LISTEN
222번 포트에서 제대로 Listen 중인 것을 볼 수 있다.
이러면 EC2 쪽 설정은 끝났다.
이제 내 쪽에서 접속할 때 포트를 222번으로 해주기만 하면 된다.
ssh -i {비밀키path}/{비밀키.pem} ubuntu@{EC2 DNS or IP} -p 222
를 이용하니...
2 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
New release '22.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Wed Jan 25 06:08:42 2023 from
ubuntu@ip:~$
진짜 너무 반갑다 우분투야!!!!!
매번 명령어를 치기 귀찮기 때문에 Config에 포트를 추가하기로 했다.
Host aws
HostName {EC2 DNS or IP}
User ubuntu
Port 222
IdentityFile ~\.ssh\ubuntuaws.pem
끗!