SSH key를 이용한 접속

SSH Key란

SSH 접속은 패스워드로도 할 수 있지만, 안전한 인증방식은 아니라고 한다.

컴퓨팅 파워가 증가하면서 password를 단순 대입하며 bruth force 방식으로 접속 시도를 할 수 있고,

사람이 기억할 만한 password는 대부분 burth force 방식을 막을만큼 충분히 길지 않기 때문이다.


이제, password 대신 ssh key라는 추가적인 보안 방식을 사용해보자.

ssh key는 공개키와 개인키로 나뉘어져 있다.

공개키와 개인키는 대칭키로, 각각의 키로 암호화한 암호는 대칭되는 키로만 해석이 가능하다.

즉, 공개키로 암호화한 암호는 개인키로만 해석이 가능하고, 개인키로 암호화한 암호는 공개키로만 해석이 가능하다.


공개키는 아무에게나 공개해도 되지만 개인키는 절대 타인에게 공개해서는 안되는데 그이유는 다음과 같다.

  1. 공개키로 암호화한 암호는 개인키를 가진 나만이 해석할 수 있기 때문에, 나만 볼 수 있게 하기위한 비밀메세지와 같다.

  2. 공개키로 해석할 수 있는 암호는 개인키를 가진 나만이 만들 수 있기 때문에, 개인키로 암호화한 암호는 내가 나임을 인증하려는 인증서의 목적이 크다.

  3. 따라서 나의 개인키를 공개한다는 것은 아무나 나인척 할 수 있게 만드는 것이다

SSH 서버에 SSH Key로 인증하는 방식

SSH Key로 인증을 위해 나의 공개키가 서버안의 authorized_keys 파일에 등록되었다고 가정하자.


SSH를 인증하는 방식은 다음과 같다.

  1. 클라이언트(나)가 서버에 SSH연결을 요청한다.
  2. 서버는 랜덤 스트링을 생성하여 클라이언트에게 보낸다.
  3. 클라이언트(나)는 전달받은 랜덤 스트링을 개인키로 암호화하여 서버에게 보낸다.
  4. 서버는 받은 암호를 authorized_keys에 등록된 공개키로 해석한 후, 2번에서 보냈던 랜덤 스트링과 일치하는지 확인한다.
  5. 일치한다면 클라이언트(나)는 authorized_keys에 등록된 authorized client 중 하나이므로 인증완료된다.