1. SSH란
Secure Shell. 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜.
- 원격 접속 보안을 위한 필수적인 요소.
- Cloud 서비스에서 제공하는 서버는 기본적으로 원격 접속을 해서 접근하고 사용.
- 따라서 서버 생성시 필수적으로 SSH 보안 과정을 거친다.
2. 작동 원리
2-1. SSH 클라이언트(사용자)
- ssh-keygen 명령어를 사용하여 공개키와 개인키 생성.
- 개인키: ~/.ssh/id_rsa
- 공개키: ~/.ssh/id_rsa.pub
- 공개키는 서버에 접속하기 위해 서버의 ~/.ssh/authorized_keys 파일에 등록되어야 함.
// authorized_keys 예시
ssh-rsa [클라이언트 공개키] [클라이언트 이름]@[클라이언트 시스템 호스트 이름]
- ssh-rsa를 통해 만들어진 공개키이고, [클라이언트 이름]@[클라이언트 시스템 호스트 이름] 부분은 주석일 뿐이라 기능에 영향을 미치지 않지만, 키 관리를 더 쉽게 하기 위해 주석을 포함하는 것이 좋다.
2-2. SSH 서버 (호스트)
- 서버에도 서버의 공개키, 개인키가 존재한다.
- 개인키: /etc/ssh/ssh_host_rsa_key
- 공개키: /etc/ssh/ssh_host_rsa_key.pub
- 클라이언트가 서버에 처음 연결 시도 시, 해당 공개키를 클라이언트에게 제공한다. 클라이언트는 ~/.ssh/known_hosts 파일에 접속을 시도한 서버의 공개키를 저장함.
- known_hosts가 필요한 이유는 MitM(Man-in-the-Middle) 공격으로부터 보호하기 위함.
- MitM 공격이란 공격자가 사용자를 속여 중요한 정보를 공개하도록 시도하기 위해 서버에 대한 연결을 가로채고 서버인 것처럼 가장하는 것.
- 서버가 제시한 공개키가 known_hosts 파일의 키와 일치하지 않으면 클라이언트는 연결을 거부할 수 있음.
- 일치하는 경우 클라이언트는 처음 연결한 동일한 서버에 연결하고 있음을 확신할 수 있다.
- 클라이언트가 해당 서버에 접속하기 위해서는 클라이언트의 공개키가 서버의 ~/.ssh/authorized_keys에 저장되어야 함.
3. 정리
3-1. 클라이언트 ~/.ssh
- id_rsa: 개인키
- id_rsa.pub: 공개키
- known_hosts: 이전에 접속한 SSH 서버들의 공개키 목록
3-2. 서버 ~/.ssh
- authorized_keys: 접속을 허용할 SSH 클라이언트들의 공개키 목록
3-3. 서버 /etc/ssh
출처
https://spidyweb.tistory.com/310
https://library.gabia.com/contents/infrahosting/9002/
https://library.gabia.com/contents/9008/
https://gwonbookcase.tistory.com/56