[EC2] SSH 접속 문제 해결

얄루얄루·2023년 1월 25일
1

AWS

목록 보기
1/1

Background

어느날 갑자기 Open_ssh를 이용한 EC2 접속이 안되는 문제가 발생했다.

에러 메세지는 Port 22: Connection timed out

처음 시도해 본 것은 공식 문서였다.

  1. IP주소/호스트이름 => 정확함. 애초에 Config 파일로 만들어둬서 틀릴 이유가 없다.
  2. 상태 확인 => 2/2 잘 통과 중.
  3. 인바운드 규칙 => 열려있음. 전까지 잘 쓰고 있었다.
  4. ACL 설정 => 해둔 게 없음. 혹시 몰라 설정 추가 했는데도 안 된다.
  5. 라우팅 테이블 => 건드린 적이 없는데, 가서 봤지만 딱히 문제 없어보임.
  6. 방화벽(ufw) => 비활성화
  7. TCP 래퍼 => 문제없음.

점점 미궁속으로 빠져드는 문제.

심지어 며칠 전까지는 잘만 되었다는 게 더 쇼크다.

EC2에 정말 문제가 있나?

키도 교체해보고, ssh도 재시작해보고 할 수 있는 건 다 해봤다.

그러면서 알게된 건, aws 사이트의 ec2 콘솔을 이용한 접속은 잘 된다는 것.

그리고 내부에서 서버 하나를 돌리고 있었는데, dockerhub나 프론트단과의 연결은 잘 된다는 것.

확실하진 않지만 EC2에는 문제가 없다고 잠정적으로 결론을 내렸다.

내 컴퓨터가 문제인가?

EC2에 문제가 없다고 한다면,

  • 내 컴퓨터에서 거기까지 도달하는 회선에 문제가 있거나 => EC2 콘솔로는 접속이 되기 때문에 이건 아닌 듯
  • 내 컴퓨터의 ssh 설정 등에 문제가 있거나

할 수 있다는 생각이 들었다.

하지만 딱히 건드린 게 없는걸?

그래도 확인은 해봐야겠으니 남는 컴퓨터로 접속을 해보기로 했다.

만약 해당 실험이 성공한다면 내 컴퓨터 쪽 설정에 문제가 있는 거다.

결과는 동일 에러 발생.

이때도 이것저것 해봤는데 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 22Port 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 파일 변경

매번 명령어를 치기 귀찮기 때문에 Config에 포트를 추가하기로 했다.

Host aws
HostName {EC2 DNS or IP}
User ubuntu
Port 222
IdentityFile ~\.ssh\ubuntuaws.pem

끗!

profile
시간아 늘어라 하루 48시간으로!

0개의 댓글