Secure Shell Protocol은 ID/PW 방식을 사용해 호스트에 접속하는 프로토콜 특유의 보안 취약점을 해소하기 위해 사용한다.
비밀번호 자체는 유출이나 탈취의 위험이 있기 때문이다.
SSH는 평문 전달 방식이 아니라 대칭키 혹은 비대칭키 암호화 방식을 사용한다. 특히 비대칭 방식은 public key와 secret key를 통해 인증을 진행하므로 한 쌍의 SSH key가 필요하다.
인증 (Authentication)
사용자와 서버를 인증하는 역할을 한다. public key와 private key를
사용하는 비대칭 암호방식을 사용한다.
private key는 외부 유출없이 가지고 있고 public key만 네트워크를 통해
전달해놓고 인증하는 방식이다.
클라이언트에서 서버에 접속할때 사용자를 인증해야 하는데 이때 전통적인
패스워드 인증방식과 더불어서 사용된다.
암호화 (Encryption)
SSH는 네트워크를 통해 전달되는 데이터를 암호화한다.
그래서 누군가 중간에 데이터를 가로채더라도 내용을 알 수 없다.
무결성 (Integrity)
네트워크를 통해 전달받은 데이터가 변경되지 않았음을 보장한다.
압축 (Compression)
SSH 연결을 통해 보낸 데이터를 압축할 수 있다.
SSH 클라이언트/서버 사이에서 데이터를 전송하기 전에 압축하고 이를 암호화해서 전송한다.
데이터를 받는 쪽에서는 복호화 작업을 거친 후 압축을 해제하고 사용한다.
비공개 키(Secret key)는 로컬 머신(SSH Client)에 있고 공개키(public key)는 원격 머신(SSH Server)에 위치한다.
SSH Client는 접속 시도시 로컬 머신의 비공개 키와 원격 머신의 공개 키를 대조해 일치 여부를 확인한다.
공개 키를 통해 메시지가 암호화 되는데, 비공개 키가 없으면 복호화 할 수 없기 때문에 공개 키는 자유롭게 공개해도 무방하다.
Unix 계열에서는 ssh-keygen을 이용한다. (윈도우 머신은 SSH client 프로그램이 키 생성 프로그램을 자체적으로 제공한다.)
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/test/.ssh/id_rsa):
키가 저장될 위치는 디폴트로 ~/.ssh 디렉토리에 저장된다.
id_rsa는 비공개 키 이름이며, 공개 키는 id_rsa.pub이다.
Created directory '/home/test/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
키에 대해 passphrase를 물어보는 부분이다. passphrase는 비공개 키를 디스크에 저장할 때 암호화 하는 용도로 쓰인다.
특정한 passphrase를 적어줄 수 있지만, 사용하지 않을 수 있다.
(오늘은 사용하지 않은 것 같았다.)
passphrase는 네트워크 상에 공개되지 않고 로컬에서 비공개 키를 해석하는데만 사용한다.(그래서 네트워크 기반의 공격이 불가능하다.)
또 제한된 디렉토리 내에서만 보관되며 키 자체는 owner만 rw가 가능해 다른 사용자는 볼 수 없다.
이로써 인증에 사용할 수 있는 공개 키와 비공개 키 쌍이 만들어졌다. 공개 키는 서버에 넣어주어 SSH key를 인증에 사용할 수 있게 된다.