이번 포스팅은 SSH의 개념, 사용자 인증흐름, AWS 사용 예시까지 확인해보려합니다.
참고로 해당 포스팅에서 ssh 사용예시로 AWS EC2와 MobaXterm 을 사용하였으며, 해당 서비스와 프로그램에 대한 구체적인 사용방법이 아닌 개념을 이해하기위한 맥락관점에서 설명 할 예정입니다.
* AWS EC2 : 아마존 웹 서비스에서 제공하는 클라우드 서비스 (PaaS)
* MobaXterm : SSH, SFTP 등의 원격 접속을 할 수 있는 프로그램
1. 개념
- SSH는 secure shell 의 약자로써 원격지 PC에 보안접속을 할 수 있는 CLI 기반 프로그램 또는 암호화 프로토콜을 의미합니다.
* CLI (Command Line Interface) : 명령줄 인터페이스 (<=> GUI )
2. 특징
2.1 원격접속 프로그램 telnet 이 평문으로 전송하기 때문에 발생하는 보안 이슈를 해결하기 위해서 등장
2.2 보안 통신을 위해 공개키 (=비대칭키) 암호화 방식으로 사용자를 인증
(* 중요 : 전자서명과 동일한 방식의 인증)
3. 사용자 인증 흐름
3.1 client 가 server 에 ssh 연결 요청
3.2 server 는 data(hash value) 를 클라이언트에게 전송
3.3 client 는 server 로 부터 받은 data를 private key 로 암호화해서 server 에게 전송
3.4 server 는 암호화된 data를 public key 로 복호화하여 자신이 보낸 hash value 인지 비교하고 일치할 경우 사용자 (client)를 인증함
* 이유 : server 가 가지고있는 public key로 복호화 된 것은 해당 data를 보낸 client 가 private key를 가지고 있다는 의미이기 때문임
4. AWS 사용 예시
* 참고
- client = ssh 접속을 시도하는 주체 (local PC)
- server = AWS EC2 (원격지 PC)
4.1 [server] AWS EC2 인스턴스 정보
- IP는 임의의 고정 IP 인 123.456.789.11 설정하였다고 가정하였습니다.
- AWS EC2 생성 시 발급되는 private key 를 local PC에 저장합니다. (아래 캡처에는 해당 내용은 생략됨)
4.2 [client] SSH 설정
- SSH 접속을 위해 원격지 PC (AWS EC2)의 IP 123.456.789.11 을 입력하고 port는 22를 입력합니다.
- AWS EC2 생성 시 발급받은 private key의 경로를 등록합니다.
(* port number 는 다른 번호도 사용 할 수 있으나 일반적으로는 22를 사용합니다.)
4.3 [client] SSH 접속 완료
- 위의 설정으로 원격지에 접속을 시도하면 원격지 PC(AWS EC2)는 local PC에서 priavte key 로 암호화한 패킷을 public key로 복호하하여 데이터를 비교함으로써 local PC (사용자)를 인증합니다.
- 사용자 인증이 완료되면 정상적으로 AWS EC2에 접속 할 수 있습니다.
5. key pair 참고
* 생활코딩 SSH key : https://opentutorials.org/module/432/3742
* AWS EC2 key pair : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/create-key-pairs.html