Ubuntu는 기본 방화벽으로 ufw를 사용한다. 이 때, ufw를 disable 했다가 enable 했을 때, ssh 접속이 다시 되지 않는 경우가 있다. 사실 무시하고 넘어갔겠지만 ufw를 enable 할 때, ssh 접속이 끊어질 수 있다는 메시지에 y라고 응답했을 것이다.
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Firewall is active and enabled on system startup
이후 EC2를 다시 ssh로 접속해보면 타임아웃 에러가 나면서 접속할 수 없게 된다.
ssh: connect to host x.x.x.x port 22: Operation timed out
이에 대한 해결 방법은 다음과 같다.
1. 신규 인스턴스 생성
2. 기존 인스턴스에서 볼륨을 분리하고 신규 인스턴스에 연결
3. 신규 인스턴스에서 ufw 설정
4. 신규 인스턴스에서 볼륨을 분리하고 기존 인스턴스에 연결
5. 기존 인스턴스 ssh 접속
그렇게 어렵지 않으니 하나씩 살펴보자.
신규 인스턴스 생성
우선 기존 인스턴스와 동일한 스펙의 신규 인스턴스를 생성한다.
이 때, 인스턴스 유형이나 스토리지 용량은 상관이 없으나, 볼륨 유형은 기존 인스턴스와 동일하게 가져가자.
기존 인스턴스에서 볼륨을 분리하고 신규 인스턴스에 연결
먼저 기존 인스턴스를 중지한다.
EC2 -> 인스턴스 -> 인스턴스 -> 기존 인스턴스 선택 -> 인스턴스 상태 -> 인스턴스 중지
정상적으로 중지되면 인스턴스 상태가 "실행 중"에서 "중지됨"으로 변경된다.
기존 인스턴스에서 볼륨을 해제한다.
EC2 -> Elastic Block Store -> 볼륨 -> 기존 인스턴스 볼륨 선택 -> 작업 -> 볼륨 분리
정상적으로 분리되면 볼륨 상태가 "사용 중"에서 "사용 가능"으로 변경된다.
해제한 볼륨을 신규 인스턴스에 연결한다.
EC2 -> Elastic Block Store -> 볼륨 -> 기존 인스턴스 볼륨 선택 -> 작업 -> 볼륨 연결
연결시 인스턴스 항목에서 신규 인스턴스를 선택한다.
정상적으로 연결되면 볼륨 상태가 "사용 가능"에서 "사용 중"으로 변경된다.
이제 신규 인스턴스에 들어가면 스토리지 내역에 새로운 스토리지가 추가된 것을 볼 수 있다.
신규 인스턴스에서 ufw 설정
이제 ssh로 신규 인스턴스에 접속한다.
연결된 볼륨을 확인한다.
$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 89M 1 loop /snap/core/7713
loop1 7:1 0 18M 1 loop /snap/amazon-ssm-agent/1480
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdf 202:80 0 8G 0 disk
└─xvdf1 202:81 0 8G 0 part
새로 연결한 볼륨을 마운트한다.
$ mkdir mnt
$ sudo mount /dev/xvdf1 ./mnt
ufw 설정 파일을 수정한다.
$ cd mnt/etc/ufw
$ sudo vim ufw.conf
ENABLED의 값을 no로 수정하고 저장한다.
신규 인스턴스에서 볼륨을 분리하고 기존 인스턴스에 연결
이제 앞선 방법과 동일하게 신규 인스턴스에 추가했던 볼륨을 분리하고 다시 기존 인스턴스에 연결한다.
기존 인스턴스 ssh 접속
기존 인스턴스를 다시 시작하고 ssh 접속을 시도하면 정상적으로 접속할 수 있다.
'aws' 카테고리의 다른 글
[AWS] S3 버킷 퍼블릭 엑세스 설정 (0) | 2022.07.25 |
---|---|
[AWS] CloudWatch logs - 로그 파일 수집 (4) | 2022.01.21 |
[Ubuntu] Ubuntu에서 rc.local 없을 때, 생성하는 방법 (0) | 2022.01.09 |
[EC2] 프리티어(t2.micro)에서 Jenkins 용량 초과 문제 (2) | 2022.01.09 |
[Ubuntu] Jenkins 설치 (0) | 2022.01.09 |