개요
- GitHub 에서 repository 를 clone 할 때나, AWS 같은 클라우드 서비스에서 서버를 이용하다 보면 인증키나 KetPair 라는 것을 생성하는 과정을 반드시 거치게 된다.
- 생성하면 .pem 이라는 형식의 파일을 받게 되는데 이 파일은 우리가 생성한 서버에 원격으로 접속할 때, 외부의 보안 위협으로부터 보호해주는 SHH 라는 보안 방식이 적용된 서버에서 반드시 필요한 파일이다.
- SSH는 서버 보안에 있어서 가장 대표적이고 유용한 수단이기 때문에 많은 클라우드 서비스에서 이렇게 제공하고 있다.
SSH
- SSH는 Secure Shell의 줄임말로, 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜
- Shell: 명령어와 프로그램을 사용할 때 쓰는 인터페이스 (커널과 사용자 간의 다리 역할)
- Protocal: 서로 다른 통신 장비 간 주고 받는 데이터의 양식과 규칙
- 기존 원격 접속은 Telnet 이라는 방식을 사용했는데, 모든 정보를 평문으로 보내기 때문에 중간자 공격에 취약했다.
- SSH 는 TCP 상에 보안 채널(터널링)을 형성하여, 그 위에서, 기타 응용 프로토클들이 안전하게 데이터를 교환 할 수 있게 해준다.
- 사용자 클라이언트 및 응용 서버 사이에서 SSH 클라이언트 미 SSH 서버가 존재한다.
SSH 통신 방식
- 사용자(클라이언트)와 서버(호스트)는 각각의 키를 보유하고 있으며, 이 키를 이용해 연결 상대를 인증하고 안전하게 데이터를 주고 받게 된다.
- 키를 생성하는 방식이 두 가지가 있는데, 대칭키와 비대칭키(또는 공개 키) 방식이다.
Public Key and Private Key
- SSH는 다른 컴퓨터와 통신할 때 Key Pair 를 통해 접속하려는 컴퓨터와 인증 과정을 거친다.
- Key Pair 는 공개 키와 개인 키의 두 가지로 이루어진 한 쌍을 뜻한다.
- 공개 키의 경우 .pub, 개인 키의 경우 .pem의 파일 형식이다.
- Public Key
- 공개되어도 안전한 Key
- 이 키를 통해 메시지를 전송하기 전 암호화를 한다.
- 암호화는 가능하지만 복호화는 불가능하다.
- Private Key
- 외부에 노출되어서는 안되는 Key
- 본인의 컴퓨터 내부에 저장한다.
- 암호화된 메시지를 복호화 할 수 있다.