AWS에 새로 계정을 파고 EC2 설정을 마치고 로컬에서 ssh 접속이 안되는 현상 발생했습니다.
작업 순서
1. 네트워크 설정
자세한 내용은 아래 블로그를 참고 하였습니다.
https://velog.io/@tlsalsckd13/AWS-기본-VPC-만들기
1.1. VPC : 최초 설정된 default VPC 유지
1.2. 서브넷 생성
가용영역 ap-northeast-2a, ap-northeast-2b에 각각 생성
1.3. 인터넷 게이트웨이 생성 및 VPC 연결
※ VPC에 정상 연결 되면 상태가 Attached 로 변경 됩니다.
1.4. 라우팅 테이블 서브넷 연결
※ 2번에서 생성한 서브넷이 정상적으로 연결 되었습니다.
2. EC2 생성
자세한 내용은 아래 블로그를 참고 하였습니다.
https://olrlobt.tistory.com/83
2.1. EC2 인스턴스 만들기
프리티어로 Amazone Linux 2023, t3.micro로 생성했습니다.
※ 인스턴스 생성시 만들어진 pem키를 다운 받아서 로컬에 저장
2.2. 보안그룹 설정
인바운드 TCP 22(SSH), 80(HTTP), 443(HTTPS)에 대해 모든 scource ip로부터 접근을 허용했습니다.
2.3. 인스턴스 연결
인스턴스 상세보기에 퍼블릭IP와 DNS가 정상 할당 된 것을 확인
[연결]을 클릭 하면 SSH 연결 정보가 표시 됩니다.
정상적이라면 위 노란색 연결 명령으로 EC2에 SSH 연결이 되어야 합니다.
문제
1. SSH Connection timed out
EC2에 할당된 퍼블릭 도메인네임, IP 모두 SSH 연결 시도하면 timed out 발생 합니다.
2. DNS에서 알 수 없는 IP 반환
SKB 기본 DHCP로 할당된 DNS 서버(210.220.163.82)로 nslookup 해보면 가끔 이상한 2xx.xxx.xxx.xxx IP가 나올 때가 있습니다. EC2할당된 IP는 3.xxx.xxx.xxx 입니다.
과거에도 이런 경험이 있었던 것 같은데, server를 구글 DNS로 1차 8.8.8.8, 2차 8.8.4.4 로 변경하면 정상적으로 EC2에 할당된 IP를 반환 합니다. (이해 불가)
시도
1. 재설정
VPC만 그대로 두고
EC2 인스턴스, 서브넷, 네트워크 ACL(인바운드 모두 허용), 보안그룹(인바운드 모두 허용), 인터넷 게이트웨이, 라우팅 테이블, 모두 삭제 하고 다시 설정했지만 결과는 동일 했습니다.
2. 콘솔에서 브라우저를 통해 EC2 연결은 SSH가 정상적으로 접속 됩니다.
3. 로컬 네트워크 문제인가 싶어서 서브 노트북에 스마트폰 테더링(SKT)로 시도해도 여전히 Connection timed out 발생합니다.
4. 브라우저로 EC2에 접속 해서 ssh 로그를 보아도 접속 시도 자체가 안걸립니다.
5. SSH(22)만 문제인가? 싶어서 EC2에 nginx 웹서버를 설치 하고 HTTP(80)로 접속 하니 Nginx 기본 페이지가 보여집니다.
6. 혹시나 싶어서 지인을 통해 외부에서 접속이 되는지 확인 요청 했더니 SSH 접속에 문제가 없다고 합니다.
7. 로컬 PC에 보안 프로그램, 백신등에서 22번 outbound를 차단 하는가 싶어서 라즈베리파이(ubuntu bookworm)에서 접속 해봐도 동일한 증상합니다.
8. 설마 SK브로드밴드 모뎀에서 차단하는 것 일까? 싶어서 구글링 해보니 많은 내용이 나옵니다.
내용을 보면 SKB 고객센터에서 최근에 나오는 모뎀에서 outbound 22번 포트가 차단되어 있다는 것을 공식 인정했고, 허용하도록 설정하는 것은 불가능 한 것 같습니다. 상대적으로 유연한 KT, LGU로 변경하는 수 밖에... 없지만 현실적으로 가장 쉬운 방법은 EC2의 SSH 포트를 변경하는 것입니다.
조치
1. EC2 SSH 포트 변경
$ sudo vi /etc/ssh/sshd_config
주석 처리 되어 있는 Port 설정을 풀고 2222로 변경 후 ssh 데몬 재시작
$ sudo systemctl restart sshd
netstat -nltp 명령으로 오픈된 포트를 확인해 보면 2222로 잘 바뀐 것을 확인 할 수 있습니다.
2. 보안그룹 SSH 포트 변경
인바운드 규칙 편집에서 유형을 사용자 지정 TCP로, 포트를 2222로 변경 했습니다.
3. pem키 권한 문제
EC2 인스턴스 연결 페이지에 보면 pem키의 권한을 변경하라고 합니다.
윈도우에서 실행하면
리눅스에서 실행하면
모두 WARNING: UNPROTECTED PRIVATE KEY FILE! 메시지를 출력 하면서 퍼미션 문제가 발생합니다.
리눅스는 chmod 400 팸키파일명.pem 명령으로 간단히 처리가 되지만 윈도우는 조금 복잡합니다.
아래 블로그를 참고 했습니다.
https://4whomtbts.tistory.com/130
퍼미션 조정 후 윈도우 접속
리눅스 접속
둘다 문제가 없습니다.
4. SSH 클라이언트 (Putty)용 키파일 변환
많이 사용하는 SSH 클라이언트인 Putty 에서는 .pem 형태의 키파일을 바로 사용할 수 없고 변환을 해야 합니다.
Putty 를 설치 했으면 윈도우 검색창에 putty를 입력 하면 아래 그림처럼 PuTTYgen 이라는 프로그램이 검색 됩니다.
[Load] 버튼 클릭
확장자를 All Files (*.*)로 바꾸고 경로를 pem키 파일이 저장된 위치로 가서 파일을 선태 합니다.
정상적으로 읽어들이면 확인 창이 나옵니다.
Save private key 클릭
경고창 [예] 클릭 하고 원하는 파일명으로 저장합니다.
5. SSH 클라이언트 (Putty)로 접속
Host Name (or IP address)에 EC2에서 할당된 퍼블릭 도메인(IP도 가능하지만 인스턴스 재시작시 IP가 변경될 수 있어서 도메인으로 했습니다.)
Port에 위에서 변경한 SSH포트 2222 입력
Saved Sessions에 원하는 이름을 넣습니다.
왼쪽 Category: 에서 Connection > SSH > Auth > Credentials 로 가서 Private key file for authentication: 에 위에서 변경한 파일을 찾아서 선택 합니다. (카테고리 경로는 Putty 버전 마다 약간 상이 합니다. 구버전은 Auth 메뉴에 Private key file for authentication 선택하는 란이 있음)
Connection > Data 메뉴에서 Auto-login username 에 ec2-user(EC2 설치시 변경했으면 변경한 username)을 입력 합니다.
다시 왼쪽 Category: 에서 Session 메뉴로 가서 [Save] 를 클릭하면 Saved Sessions리스트에 새로운 목록이 추가 됩니다.
이후 부터는 Putty를 실행하고 Saved Session에서 세션 선택 > [Load] 클릭 > [Open] 하면 SSH 연결을 시도 합니다.
클라이언트에서 최초 연결시 키의 지문(fingerprint) 를 저장 할 것인지 확인합니다.
향후 자주 접속 하는 것이면 Accept 를 누르면 지문을 저장하고 다음 부터는 물어보지 않습니다.
보안이 필요 한경우는 Connect Once를 선택하면 이번 연결에만 사용하고 삭제 됩니다.
정상 적으로 접속 되었습니다.
후기
이 간단한 것을 하려고 주말 이틀을 삽질 했습니다.
의문 1. SK브로드밴드는 왜 SSH(22)포트를 기본 블럭 정책으로 해 놓은 것인지?
의문 2. SKT 스마트폰 테더링에서도 SSH(22) 포트가 안된 이유는?
의문 3. SK 브로드밴드 모뎀의 DHCP에서 제공하는 DNS 서버로 dns lookup에서 EC2 IP가 아닌 이상한 IP를 반환한 이유는?
세가지 이해 할 수 없는 상황은 SK가 그렇구나 하고 넘어가야 할 것 같습니다.
끝.
'UNIX-Networking' 카테고리의 다른 글
[Ubuntu] 시간 동기화 서버 chrony 설치 (1) | 2025.07.20 |
---|---|
crontab 명령 중복 실행 방지 (0) | 2024.05.30 |
Ubuntu GUI 환경 '원격 데스트톱연결'로 접속하기 (1) | 2022.11.29 |
Linux crone tab 으로 MySQL 일단위 정기 백업 (최근 1주일치만 유지 하기) (1) | 2019.12.23 |
CentOS 7 에 Tomcat 7 자동 재시작 하도록 서비스 등록 (0) | 2018.11.15 |