[Dev] AWS Lightsail로 서버 만들기 (Linux/Ubuntu) - SSH Key Authentication #2
본격적인 서버 구축에 앞서 가장 중요한 것은 바로 서버 보안인데
아무리 기능이 좋은 서버라도 서버 보안이 좋지 않으면 해커 및 기타 여러 보안사고가 발생하기 때문
(랜섬웨어나 디도스 등)
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
만든 서버정보에 들어가 SSH 키를 다운로드하고
특정 경로에 폴더를 하나 만들어서 소중하게 보관해 줍니다
권한을 다른 사람이 못 읽게 설정하는 것도 좋겠네요
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의 내용과 같은 걸 볼 수 있다
저장해뒀던 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