AWS를 공부할 때도, Jenkins를 공부할 때도 SSH가 많이 나와서 이해하기가 어려웠다.
그래서 이 참에 공부하며 이해를 넓히려고 한다!
SSH란?
SSH는 Secure Shell의 약자로 원격 호스트에 접속하기 위해 사용되는 통신 프로토콜이다.
Shell(쉘)은 명령어와 프로그램을 사용할 때 쓰는 인터페이스를 말하는데 사용자로부터 명령을 받아 해석하고
실행하는 역할을 한다
SSH가 필요한 이유
SSH가 널리 사용되는 이유는 기존 원격 접속 방식인 Telnet이 지닌 보안 취약점 때문이다. SSH는 데이터 전송과 원격 제어에 사용되는데 SSH는 비대칭키와 대칭키 방식으로 암호화되어 보안 상 안전하다
AWS와 같은 클라우드 서비스에서 제공하는 서버는 기본적으로 원격 접속으로 접근하고 사용한다
SSH 암호 방식
- 비대칭키 방식
사용자와 서버가 서로의 정체를 증명하기 위해 비대칭키 방식을 사용한다. 비대칭키 방식에서는 서버 또는 사용자가 Key Pair, 즉 키 쌍을 생성한다. 키 페어는 공개 키(Public key), 개인 키(Private Key) 두 가지로 이루어져 있는데 보통 공개 키의 경우 .pub, 개인 키의 경우 .pem의 파일 형식을 띄고 있다
예를 들어 사용자가 키 페어를 생성한 경우 공개 키를 서버에 전송한다. 공개 키는 전송 과정에서 유출되어도 크게 문제가 없다. 서버는 공개 키를 받아서, 이 공개 키로 만들어진 랜덤한 값을 생성한다. 이 값은 사용자가 올바른 키 페어를 가지고 있는지 증명하는데 사용되는 시험지와 같다. 사용자는 가지고 있는 개인키를 이용해 시험지를 푼다. 공개 키와 개인 키는 하나의 커플 관계와도 같기 때문에 다른 공개 키나 개인 키를 이용해서 증명할 수는 없다.
사용자는 시험지를 풀어 나온 값을 서버에 전송하고 서버는 본인의 값과 비교하여 사용자를 증명한다. 이렇게 최초 접속 시 사용자와 서버 간의 인증 절차가 비대칭키 방식을 통해 완료된다
- 대칭 키 방식
대칭 키 방식은 정보를 주고 받을 때 사용된다. 정보의 보안을 위해 암호화하는 방식이며 사용자 또는 서버가 하나의 대칭키를 만들어 서로 공유한다. 공유된 대칭 키를 이용해 정보를 암호화하면, 받은 쪽에서 동일한 대칭키로 암호를 풀어 정보를 습득하게 된다. 정보 교환이 완료되면 교환 당시 썼던 대칭 키는 폐기 되고, 나중에 다시 접속할 때마다 새로운 대칭키를 생성한다