2009년 11월 17일 화요일

패스워드 없이 ssh 로그인

출처 : Lshcraft's heaven
http://lshcraft.tistory.com/entry/%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C-%EC%97%86%EC%9D%B4-ssh-%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%95%98%EA%B8%B0

먼저 ssh-keygen 이란 툴이 필요하다. 대부분의 리눅스 배포판에 기본적으로 깔려있다.

기본 원리는 터미널에서 인증 키 pair를 생성 (하나는 private key, 다른 하나는 public key)한 뒤 public key를 서버에 카피하고 이 key에 미리 설정된 pass phrase 패스워드를 이용하여 접속하는 방식 되겠다. 물론 패스워드 없이 로그인하려는 취지에 맞게 pass phrase 패스워드는 설정하지 않는다.

1. 클라이언트 사이드

$HOME/.ssh 에 다음과 같이 key pair를 생성한다. (RSA 알고리즘을 사용한 예)

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/User'sID/.ssh/id_rsa):
(키 파일을 생성할 경로와 파일명을 지정하는 것인데 그냥 엔터쳐서 디폴트로 만드는것이 편하다.)
Enter passphrase (empty for no passphrase):
(pass phrase 패스워드를 설정하는 곳인데 목적에 맞게 그냥 엔터를 쳐서 패스워드없이 생성한다.)
Enter same passphrase again:
(다시한번 엔터)
Your identification has been saved in /home/User'sID/.ssh/id_rsa.
Your public key has been saved in /home/User'sID/.ssh/id_rsa.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX User'sID@HOSTNAME
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . |
| o +|
| XX . + .=|
| = XX+ +ooo|
| . B XXo+.|
| oXXX.+. |
| ...o |
+-----------------+


위에서 보이듯 $HOME/.ssh 에 id_rsa (private key)와 id_rsa.pub (public key)의 key pair가 생성된다. 그리고 아래에는 키의 고유한 finger print가 출력된다.
이걸로 일단 클라이언트 쪽의 설정은 끝이다.

2. 서버 사이드

서버에서 필요한 것은 클라이언트에서 생성된 public key이다. 클라이언트에서 생성된 id_rsa.pub 파일을 서버의 $HOME/.ssh/authorized_keys 라는 이름으로 카피한다.
서버쪽에서는 이것으로 설정이 끝난다.

이제 클라이언트에서 서버로 ssh 접속을 때려보자. 패스워드를 묻는 부분 없이 바로 셸이 뜰것이다.