ufw를 enable할 때 분명히 얘가 이렇게 친절히 물어봤다.

Command may disrupt existing ssh connections. Proceed with operation?

나는 아무렇지도 않게 y를 눌렀고

그 이후로 서버에 접속이 되지 않았다.

ssh: connection to host {IP 주소} port 22: Connection timed out

이럴수가...

ufw를 enable 시켜서 이런 문제가 발생한 것이기 때문에 이를 해결하려면 ufw를 다시 disable 시키면 된다.

그런데 서버에 접속을 해야 disable을 하든지 말든지 할텐데 서버 접속이 안 되는데 어쩌란 말이냐!!

 

하지만 구글링을 해보니 다 방법이 있다.

 

일단 접속이 불가능해진 해당 인스턴스를 중지시킨다. (종료 아니고 중지다. 종료를 하면 인스턴스가 삭제되니 주의할 것)

 

번역이 참... 중지 인스턴스?

주황색 중지 버튼을 누른다.

 

 

인스턴스를 중지하면 인스턴스 상태가 '중지중'이다가

 

조금 기다리면 '중지됨' 상태가 된다.

 

 

왼쪽 메뉴 중 아래쪽에 Elastic Block Store(EBS)의 볼륨 메뉴에 들어간다.

 

방금 중지시킨 해당 인스턴스와 연결되어 있는 볼륨을 분리한다. (작업 > 볼륨 분리)

 

주황색 '분리' 버튼을 누른다.

 

성공적으로 분리되었다.

 

다시 인스턴스 메뉴로 들어가서 '인스턴스 시작' 버튼을 눌러 새 인스턴스를 하나 생성한다. (임시로 사용할 인스턴스이다)

나는 pem 파일 다시 받고 하면 귀찮으니까 키페어는 똑같은 키페어를 쓰고 보안그룹도 그대로 선택했다.

(우리집 IP랑 내가 자주 가는 카페 IP만 ssh 접속을 허용해놓은 보안그룹이다.)

 

스토리지 구성 부분이 중요한데, 볼륨 유형 (gp2, gp3 등)을 기존 인스턴스와 똑같이 지정해주어야 한다.

 

잠깐 쓰고 삭제할 임시 인스턴스이기 때문에 temp-server라는 이름으로 생성했다.

아직은 인스턴스 상태가 대기중이다.

조금만 기다리면 '실행중' 상태가 된다.

 

다시 볼륨 메뉴로 간다.

아까 기존 인스턴스에서 분리한 볼륨이 '사용 가능' 상태로 되어 있고, 이번에 인스턴스를 새로 만들면서 생긴 볼륨이 '사용중'으로 되어 있는 것을 볼 수 있다.

 

'사용 가능'인 기존 볼륨을 이번에 새로 만든 임시 인스턴스와 연결해준다.

기존 볼륨을 체크하고 작업 > 볼륨 연결을 클릭한다.

 

연결할 인스턴스로 방금 새로 만든 임시 인스턴스를 선택한다.

 

주황색 '볼륨 연결' 버튼을 누른다.

 

새로 만든 임시 인스턴스에 접속한다.

나는 키페어를 그대로 했기 때문에 기존에 있던 pem 파일을 사용하여 접속했다.

아래 명령어를 입력한다.

sudo lsblk

xvdf 아래에 xvdf1이 보인다.

 

새로운 디렉토리를 생성하고

xvdf1을 해당 디렉토리에 마운트시킨다.

mkdir mnt
sudo mount /dev/xvdf1 ./mnt

 

아래 명령어로 방금 만든 mnt 디렉토리의 /etc/ufw/ufw.conf 파일을 vi editor로 연다.

sudo vi /mnt/etc/ufw/ufw.conf

 

ENABLED=yes라고 되어 있는 것이 보인다.

이 부분을 no로 수정하고 저장한다.

이제 드디어 ufw를 disable 시키는 데 성공한 것이다.

 

이제 임시로 생성했던 인스턴스를 중지시킨다. (조금 기다리다가 새로고침을 하면 인스턴스 상태가 '중지됨'이 된다)

 

임시 인스턴스와 임시로 연결했던 원래 볼륨을 볼륨 분리해준다. (작업 > 볼륨 분리)

 

조금 더 기다리면 다시 볼륨 연결 버튼이 활성화된다.

기존 볼륨을 선택하고 작업 > 볼륨 연결 버튼을 누른다.

 

인스턴스는 기존에 있던 인스턴스를 선택한다.

 

디바이스 이름은 자동으로 채워져 있을 것이다. 그런데 이대로 볼륨을 연결하면 안 된다!! 디바이스 이름을 바꿔줘야 한다.

 

루트 볼륨은 /dev/sda1이라는 이름을 사용해야 한다고 한다.

/dev/sda1로 디바이스 이름을 고치고 '볼륨 연결' 버튼을 누른다.

 

다시 인스턴스 메뉴로 돌아와 기존 인스턴스를 시작한다. (인스턴스 상태 > 인스턴스 시작)

 

만약 아래와 같이

Invalid value {인스턴스 ID} for instanceId. Instance does not have a volume attatched at root (/dev/sda1)

라는 에러가 나면서 인스턴스 시작에 실패한다면 볼륨을 연결할 때 디바이스 이름을 /dev/sda1로 하지 않은 것이다.

다시 볼륨을 분리했다가 볼륨을 연결할 때 디바이스 이름을 /dev/sda1로 해서 다시 연결하면 된다.

 

인스턴스 상태가 '대기중'이다가 '실행중'으로 바뀌면 ssh로 접속을 시도한다. 이제 성공적으로 접속이 된다.

 

인스턴스 상태가 '실행중'으로 바뀌었어도 너무 바로 접속하면 이렇게 Connection refused가 뜰 수도 있는데, 잠시 기다렸다가 접속하면 된다.

 

마지막으로 임시로 생성했던 인스턴스를 삭제한다. (인스턴스 상태 > 인스턴스 종료)

 

그러고 나서 다시 ufw를 사용하고 싶다면

sudo ufw allow ssh

이렇게 먼저 ssh를 allow 해준 뒤

sudo ufw enable

ufw를 enable 시켜주면 된다.

 

출처

https://yvvyoon.github.io/ubuntu/ufw-enable-ssh-timeout/

https://gksdudrb922.tistory.com/202

https://zel0rd.tistory.com/192

 

일단 서버에 접속을 한다.

그리고

sudo git clone 깃허브 프로젝트 URL

이렇게 입력하여 깃허브에 있는 프로젝트를 clone해 온다.

 

깃을 설치해준 적이 없다면 "bash : sudo : git command not found"라는 에러가 뜰 것이다.

 

따라서 깃을 설치해줘야 한다.

https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%84%A4%EC%B9%98

 

Git - Git 설치

이 책은 Git 2.0.0 버전을 기준으로 썼다. 대부분의 명령어는 그 이전 버전에서도 잘 동작하지만, 몇 가지 기능은 아예 없거나 미묘하게 다를 수 있다. Git의 하위 호환성은 정말 훌륭하기 때문에 2.0

git-scm.com

여기 나와 있는대로

sudo dnf install git-all

이렇게 입력해서 git을 설치해준다.

 

그런데 dnf를 설치해주지 않았다면 "sudo: dnf command not found"라는 에러가 또 날 것이다.

 

그렇다면 아래 링크에서와 같이

https://www.rootusers.com/how-to-install-dnf-package-manager-in-centosrhel/

 

How To Install DNF Package Manager In CentOS/RHEL

Learn how to install the new DNF package manager in CentOS and RHEL Linux. DNF has already replaced Yum in Fedora, so it's worth learning.

www.rootusers.com

다음 명령어를 쳐서 dnf를 설치해주면 된다.

yum install epel-release -y

그 다음

yum install dnf -y

이 명령어를 입력하면 된다.

 

만약에 이 yum에서 "you need to be root to perform this command."라는 에러 메시지가 뜬다면

https://m.blog.naver.com/PostView.nhn?blogId=blindman83&logNo=110149575684&proxyReferer=https:%2F%2Fwww.google.com%2F

 

you need to be root to perform this command

you need to be root to perform this command centos 에서 yum install ~~ 하려고보니 이러한 에러 메시지...

blog.naver.com

su -

를 입력해서 root 계정으로 변경해주면 된다.

 

그러면 Password: 라는 말이 뜨면서 비밀번호를 입력하라고 할 것이다.

 

그런데 나는 비밀번호를 설정한 적이 없어서 비밀번호를 모르니까 아무 비밀번호를 치면 "su: Authentication failure"라고 뜰 것이다.

 

그렇다면 비밀번호를 설정해주면 된다. 비밀번호 초기 설정하는 방법은

https://jhnyang.tistory.com/136

 

[리눅스] 초기 root 비밀번호 설정하기, 사용자 계정 전환하기! 관리자 전환 su, sudo 명령어란, passwd

[ 리눅스 유닉스 완전정복: 리눅스 유닉스 목차 ] 개인 노트북으로 혼자서 운영체제를 사용해왔던 사람들에게는 익숙치 않은 개념일 수도 있겠지만 리눅스는 멀티유저 운영체제이기 때문에 여��

jhnyang.tistory.com

여기 나와있는대로

sudo passwd

를 입력한다.

 

그러면 "Enter new UNIX password:"라는 말이 뜰 것이다. 원하는 비밀번호를 치고 (리눅스에서 비밀번호는 쳐도 화면에 아무런 표시가 안 나타난다. ●●● 이런 동그라미도 안 뜨니까 주의하자)

"Retype new UNIX password:"에 똑같이 한 번 더 쳐주면 비밀번호 설정이 완료된다. (비밀번호는 최소 8자리여야 한다는 말이 나오는데 나는 무시하고 그냥 했다.)

 

그렇게 root 계정으로 접속을 하고 아래 두 명령어로 아까 root가 아니라서 하지 못했던 dnf 설치를 해주면 된다.

yum install epel-release -y
yum install dnf -y

 

그리고 나서 다시

sudo dnf install git-all

깃을 설치하고

sudo git clone [깃허브 프로젝트 URL]

(혹시나 하는 마음에 쓰는 것인데 대괄호는 입력하시면 안 됩니다! .git으로 끝나는 링크만 적어주세요)

이렇게 프로젝트를 다운받아 오면 된다.

 

그 다음에 아래 명령어로 자바8을 설치해준다.

yum install -y java-1.8.0-openjdk-devel.x86_64

 

이제 https://miniminis.github.io/2019/10/13/spring/springboot-deploy/

 

스프링 부트 프로젝트 Git + Maven + AWS EC2 배포하기 | Flashlog

스프링 부트 프로젝트 Git + Maven + AWS EC2 배포하기 연차 프로젝트의 마지막 배포 작업, 바로 Spring boot 서버 배포이다. 보통 구글링을 해보면 Boot 프로젝트는 Maven 이 아닌 Gradle 로 설정한 경우가 대�

miniminis.github.io

위 링크에서 처럼 하면 된다.

그 과정은 아래와 같다.

cd [프로젝트 디렉토리 이름]

명령어로 프로젝트 폴더(디렉토리) 안으로 들어간다.

 

그 다음에 ls 명령어를 입력하면 mvnw라는 파일이 있을 것이다.

 

 

이 파일이 위 사진처럼 초록색이라는 것은 실행 가능한 (실행 권한이 있는) 파일이라는 것이다.

초록색이 아니라면 실행 가능한 파일이 아니라는 뜻이므로

chmod +x mvnw

chmod 명령으로 x 권한(실행권한)을 부여한다.

 

그 다음

./mvnw

를 입력하여 mvnw를 실행시킨다. (리눅스에서는 실행파일을 실행할 때 앞에 ./를 붙여줘야 한다.)

 

이 과정은 빌드(컴파일+링크)하는 것인데 조금 시간이 걸릴 수도 있다.

 

시간이 지나고

--------------
BUILD SUCCESS
--------------

가 뜨면

cd target

으로 target 디렉토리로 이동한다.

 

target에서 ls를 해보면

 

 

이렇게 jar 파일이 생성되어 있을 것이다.

그러면 이제

java - jar [jar 파일 이름] &

위 명령어로 백그라운드로 실행시켜주면 된다. (뒤에 &를 붙이면 백그라운드에서 실행시키는 것이다.)

 

백그라운드로 실행시키는 이유는 이렇게 해줘야 PuTTY를 종료해도 서버 프로그램이 돌아간다.

 

그러면 이제 웹 브라우저를 띄우고 AWS에서 할당받은 IP주소:포트번호/페이지 주소

IP주소:포트번호/페이지 주소

를 입력해 접속해보자.

 

만약 접속이 되지 않는다면

breakcoding.tistory.com/327

 

[AWS] AWS 서버에 서버 프로그램 돌려놨는데 외부에서 접속이 안 될 때 (리눅스 포트 여는 방법)

PuTTy로 AWS 서버에 접속해서 이렇게 서버 프로그램을 실행시키고 웹 브라우저를 띄우고 [http://ip주소/페이지 주소] 를 입력했는데 이렇게 떴다. 로컬에서 테스트 했을 때는 멀쩡히 잘 됐었는데... �

breakcoding.tistory.com

이대로 하면 된다.

 

몇 시간 동안구글링해보면서 알아낸 것들인데 이 모든 것들이 한 번에 정리된 글은 없어서 이렇게 정리하게 되었다. 누군가에게 도움이 되면 좋겠다.

오늘은 정말 많은 것을 배운 하루였다.

PuTTy로 AWS 서버에 접속해서 이렇게 서버 프로그램을 실행시키고

웹 브라우저를 띄우고 [http://ip주소/페이지 주소] 를 입력했는데 이렇게 떴다.

사이트에 연결할 수 없음

로컬에서 테스트 했을 때는 멀쩡히 잘 됐었는데...

그리고 고정 IP를 쓰는 학교 연구실 컴퓨터로 서버 프로그램을 돌려놓고 다른 컴퓨터에서 웹 브라우저로 접속했을 때도 잘 됐었다. 심지어 학교 연구실 컴퓨터에 서버 돌려놓고 안드로이드 앱에서도 서버 연결 테스트 했는데 멀쩡히 잘 됐었다. 왜 그럴까...?

 

검색을 해보니 인바운드 규칙 추가를 해야 한다고 해서

8081 포트를 추가해줬다. (왜냐하면 내가 서버 프로그램의 포트번호를 8081로 지정해줬기 때문)

application.properties에 지정한 포트번호

 

그런데 이렇게 해줘도 똑같았다. 접속이 되지 않았다.

 

그러다가 내가 리눅스 서버의 포트를 열어줘야 하나? 하고 "centOS 포트 여는 방법"이라고 검색해서

https://server-engineer.tistory.com/418

여기 있는대로

iptables -I INPUT 1 -p tcp --dport 8081 -j ACCEPT

 

이렇게 명령어를 입력했다.

 

그랬더니

Initializing을 하더니

웹 브라우저에서 멀쩡히 접속이 됐다.

 

포트를 열어줘야 하는구나. 오늘도 배워간다.

+ Recent posts