SSH는 Secure Shell의 줄임말로서 네트워크상의 다른 컴퓨터에 로그인 하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용프로그램 혹은 프로토콜을 말한다.
(* Shell이란? 커널과 사용자간의 다리역할을 하는 것으로 Client의 명령어를 입력받아 실행하게끔 도와주는 인터페이스.)
기존에 사용되던 telnel은 암호화가 이뤄지지 않아 계정정보 탈취 위험이 높았다. 그래서 여기에 암호화 기능을 추가하여 나온것이 SSH다. Shell은 기본적으로 CLI(Command Line Interface)로 작업을 하며 기본 포트번호는 22번이다.
SSH로 서버 접근시에 비밀번호가 아닌 Key를 제출하는 방식이다.
SSH구성의 가장 핵심인 Key
Client와 Server는 각각의 Key를 가지고 있으며 이를 이용해 서로를 인증하고 안전하게 데이터를 주고 받을 수 있다.
Key를 생성하는 방법에는 두가지(대칭키, 비대칭키(공개키))가 있다.
ㆍ 비대칭키
Client와 Server가 연결되기 위해선 서로를 증명해야 한다. 이 시점에서 사용되는 것이 비대칭키다. 최초 접속시 Client나 Server가 Key Pair(* Key Pair는 공개키와 개인키 두가지로 이뤄진 한 쌍을 뜻한다. )를 생성하며 공개키는 .pub, 개인키는 .pem의 확장자를 가진다.
ㆍ Client Key Pair 생성 → 공개키(Public Key)를 Server로 전송 → Server는 받은 공개키로 랜덤값을 생성하여 Client에게 반환 → Client는 Server로부터 받은 랜덤값을 개인키(Private Key)를 이용해 해석 후 나온 결과를 Server로 전달 → Client로부터 받은 값을 처음에 제공한 값과 비교 → 암호화된 채널이 형성되고 Key를 활용해 데이터를 주고 받게된다.
ㆍ 대칭키
Client와 Server간의 데이터를 주고받을 때 사용한다. 비대칭키와는 달리 1개의 키만을 사용한다.
Client 혹은 Server는 1개의 대칭키를 생성해 서로 공유한다. 이후 데이터를 주고 받을 때 생성한 대칭키를 이용해 데이터를 암호화 하여 주고받는다. 데이터 교환이 완료되면 생성한 대칭키는 폐기하고 이후 접속이 이뤄질때마다 대칭키를 새로 생성하여 사용한다.
Public Key와 Private Key
ㆍ Public Key
↳ 서로 교환할 데이터를 암호화 하는데 사용한다.
↳ 데이터를 복호화 할 수는 없다.
ㆍ Private Key
↳ 데이터를 복호화 할 수 있다.