Dev

[Dev] AWS Lightsail로 서버 만들기 (Linux/Ubuntu) - SSH Key Authentication #2

너굴먹 2024. 12. 14. 03:20

본격적인 서버 구축에 앞서 가장 중요한 것은 바로 서버 보안인데
아무리 기능이 좋은 서버라도 서버 보안이 좋지 않으면 해커 및 기타 여러 보안사고가 발생하기 때문
(랜섬웨어나 디도스 등)

putty 연결은 aws 공식 문서를 보면서 진행

 

PuTTY를 사용하여 Lightsail Linux 인스턴스에 연결 - Amazon Lightsail

PuTTY를 사용하여 Lightsail Linux 인스턴스에 연결 PuTTY 같은 SSH 클라이언트를 사용하여 Amazon Lightsail 인스턴스에 연결할 수 있습니다. PuTTY에는 프라이빗 SSH 키의 복사본이 필요합니다. 이미 키를 가

docs.aws.amazon.com

putty부터 깔아봅시다

 

Download PuTTY: latest release (0.82)

This page contains download links for the latest released version of PuTTY. Currently this is 0.82, released on 2024-11-27. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel

www.chiark.greenend.org.uk

lightsail SSH key

만든 서버정보에 들어가 SSH 키를 다운로드하고

.pem 형식 파일 다운

특정 경로에 폴더를 하나 만들어서 소중하게 보관해 줍니다
권한을 다른 사람이 못 읽게 설정하는 것도 좋겠네요

putty 설치완료

PuTTY를 설치완료하면 이렇게 PuTTY와 PuTTYgen이라는 두 개가 깔릴 텐데

이렇게 나오면 잘 가져온거

PuTTYgen을 먼저 실행해서 Load로 위 .pem 파일을 가져오면 위 창이 뜨는데

SSH에서 사용되는 RSA 알고리즘은 비대칭 암호화 방식이기 때문에 public key랑 private key 두 개 모두 있어야 함
두 개 다 다운로드해서 아까 .pem 파일을 보관했던 폴더에 같이 저장해 줍니다

무척 소중하게 바탕화면에 보관

 

이제 서버에 접속을 해볼건데, Lightsail에서 IPv4 주소를 복사해 주고

#1 PuTTY를 실행해서 session에서 IP 주소를 붙여 넣기 (포트는 22 기본포트로 고정)

#2 Connection→Data에서 로그인할 계정 이름을 입력 ( 기본 세팅은 ubuntu )

#3  Connection→ SSH → Auth → Credentials에서 Private-key 경로를 다운로드한. ppk 파일로 설정

#4 #1의 session으로 돌아와서 서버이름을 지정하고 꼭 Save 해주자 
Save 안 하면 매번 #1~#3 해줘야 함

더블클릭해도 실행됨

저장 이름 형식은 자유롭게 해도 되지만 나중에 헷갈릴 수 있으니
서버이름 유저이름@접속 아이피주소
형식으로 저장 해두는게 좋다

이런창이 뜨면 성공

성공적으로 연결이 되면 팝업창이 하나 뜰 텐데
PuTTY(또는 다른 SSH 클라이언트)가 이전에 이 서버에 연결한 적이 없어서
해당 서버의 호스트 키(host key)가 클라이언트의 캐시에 저장되어 있지 않다는 뜻

대충 처음 접속해서 뜨는 거니까 accept 해주면

서버 접속 성공!


왜 ssh키파일로 로그인이 될까?

ubuntu 서버 안에서 아래 명령어를 작성해 보자

💡  ctrl+V 가 아닌, 마우스 오른쪽 클릭이 붙여 넣기

cat /etc/ssh/sshd_config

"PasswordAuthentification Yes" 부분이 주석문(#) 처리가 되어 있는 걸 볼 수 있는데
LightSail에서 처음 서버를 만들 때부터 아이디와 비밀번호 로그인 방식을 막은 것

비밀번호 방식은 무차별 대입 공격(brute force attack)에 취약하기 때문인데
그래서 보통 클라우드 서버에서는 SSH key 기반 인증만 허용함

결론적으로 서버의 보안성을 강화하기 위함이랄까


키파일 로그인의 원리

cat .ssh/authorized_keys

ubuntu 서버 안에서 위 명령어를 작성해 보면

각 계정 폴더(여기서는 /home/ubuntu)의. ssh/authorized_keys 파일의 내용을 확인하면
다운로드한. pem형식의 파일을 puttyGen으로 변환한 public_key의 내용과 같은 걸 볼 수 있다

ubuntu 서버 에서 cat .ssh/authorized_keys 결과

저장해뒀던 public_key를 메모장으로 열어서 확인해 보자

public_key를 메모장으로 열기

 

근데 나는 서버에 내 public_key를 알려준 적이 없는데 어떻게 서버에 내 public_key를 알고 있음?

그것도 그런 게 putty로 접속할 때 내 private_key 인. ppk 파일을 넣은 적은 있는데 public키를 넣은 적은 없다
이유는 AWS Lightsail에서 서버를 생성할 때 SSH 키 페어를 선택해야 하는데
이때 생성된 키페어의 공개 키(public_key)가 서버의 authorized_keys 파일에 자동으로 추가되기 때문

#1 키 페어 생성

  • 사용자가 PuttyGen 같은 툴을 사용해 공개 키(public_key) 개인 키(private_key)를 생성하면
    공개 키는 서버에, 개인 키는 클라이언트(사용자 PC)에 안전하게 보관

#2 공개 키 등록 (authorized_keys)

  • 서버의 각 사용자 계정 디렉터리(/home/ubuntu 등)에 있는. ssh/authorized_keys 파일에 사용자의 공개 키가 저장

#3 로그인 과정: 개인 키와 공개 키 매칭

  • 사용자가 ssh key를 통해 접속을 시도하면 사용자는 자신의 개인 키(private_key)를 사용해 암호화된 인증 요청을 서버에 보냄 -> 서버는 authorized_keys 파일에 저장된 공개 키(public_key)를 이용해 이 요청을 복호화.

#4 접속 허용

  • 공개 키와 개인 키가 일치하면 서버는 클라이언트의 접속을 허용, 개인 키가 유효하지 않거나 일치하지 않으면, 접속이 거부

 

 

Lightsail에 대한 SSH 키 설정 - Amazon Lightsail

SSH 키 관리는 리전을 기준으로 수행됩니다. 새 AWS 리전에서 인스턴스를 생성하면 이 리전에 기본 키 페어를 사용하는 옵션이 주어집니다. 그 리전에서 사용자 지정 키를 사용할 수도 있습니다.

docs.aws.amazon.com