인증키를 사용하는 것은 로그인 할때마다 암호를 직접 입력하는 것보다 더욱 안전하며, 하나의 암호로 여러 ssh서버에 접속할수 있는등의 장점을 가진다.
인증키 만들기
인증키는 ssh-keygen로 만든다.
[foo@home silver]$ ssh-keygen Generating public/private rsa1 key pair. Enter file in which to save the key (/home/foo/.ssh/identity): |
키가 저장될 곳과 이름을 물어 오는데 디폴트로 그냥 엔터를 치고 넘어가면, 다음과 같이 인증키 암호를 물어온다. 원하는 암호를 두번 입력해주면 키가 생성된다.
Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/foo/.ssh/identity. Your public key has been saved in /home/foo/.ssh/identity.pub. The key fingerprint is: 88:0a:aa:xx:41:03:xx:62:94:fe:xx:d5:31:76:5b:b0 foo@home.eunjea.org [foo@home silver]$ |
인증키 생성시 인증키 암호를 공백으로 (passphrase 를 물어올때 그냥 엔터를 치면 된다) 만들수도 있는데, 이것은 ssh 접속시 암호를 입력하지 않아도 그냥 접속이 되므로 편리할수는 있으나, 만약 당신의 인증키가 어떠한 경로로든 유출되었을 경우를 생각 해보면 피해야 할 것이다. 그리고 ssh-add와 ssh-agent를 사용하여 접속시마다 인증키 암호를 입력하지 않는 방법이 있다.
퍼블릭 키 사용하기
~/.ssh/ 안에 한쌍의 키(identity 와 identity.pub)가 생성되어 있을것이다. 이제 이 인증키를 접속할 리모트 서버들의 ~/.ssh/ 에 authorized_keys 라는 이름으로 복사해준다.
[foo@home silver]$ scp ~/.ssh/identity.pub silver@gate.eunjea.org:.ssh/authorized_keys |
이제 ssh 접속을 진행 해보면 계정암호가 아닌 인증키 암호를 물어볼 것이다. 만약 계정 암호를 물어본다면 authorized_keys의 퍼미션이 잘못되어 있는 것이므로, 일단 접속후 chmod 644 .ssh/authorized_keys 해준다.
일반적으로 아무런 옵션을 주지 않고 인증키를 만들었다면 rsa1 방식의 ssh1 프로토콜의 사용을 의미한다. 서버가 ssh2 프로토콜을 지원한다면 ssh-keygen -t rsa (또는 dsa)의 옵션을 주고 인증키를 생성한다.
openSSH는 두가지 프로토콜의 인증키를 동시에 쓰는것이 가능한데, 만들어진 퍼블릭키(예를 들어 ssh-keygen -t rsa 로 만들었다면, id_rsa.pub) 를 위와 같은 방법으로 리모트 서버에 ~/.ssh/authorized_keys2 에 저장하면 된다.
인증키를 메모리에 상주 시키기
다음 방법으로 인증키를 메모리에 기억시켜 두면 처음 한번만 인증키 암호를 입력하면 다음부터는 암호를 입력하지 않아도 같은 인증키를 사용하는 모든 서버들에 접속할수 있다.
[foo@home silver]$ eval $(ssh-agent) [Enter] 다음과 같은 메세지를 보여줄 것이다. Agent pid 31234 이제 ssh-add 를 입력하면 Identity added: /home/silver/.ssh/identity (silver@home.eunjea.org) |
이제 인증키를 복사해둔 ssh서버에 접속하면 이 세션에서는 더 이상 암호를 묻지 않을 것이다.
서버가 지원한다면 되도록 SSH2 프로토콜을 사용하도록 한다. SSH2는 SSH1과는 전혀 다른 프로토콜이며 더욱 안전하고, 성능이 좋다.