더북(TheBook)

공개키 인증 사용하기

먼저 접속하려는 클라이언트에서 ssh-keygen 명령으로 공개키 개인키 쌍을 생성합니다. 키를 저장할 경로를 결정하고 패스구문을 입력합니다. Enter 누르면 기본 경로 /home/administrator/.ssh로 개인키 id_rsa와 공개키 id_rsa.pub가 생성됩니다. 패스구문을 입력하지 않으면 별도로 패스구문을 묻는 과정이 생략될 것입니다. 보안 유지가 필요한 시스템에서는 패스구문을 입력하기 바랍니다.

shinjaehun@losttemple:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/shinjaehun/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********
Your identification has been saved in /home/shinjaehun/.ssh/id_rsa.
Your public key has been saved in /home/shinjaehun/.ssh/id_rsa.pub.
The key fingerprint is:
60:e4:28:e4:29:12:38:a7:0b:f8:5d:18:da:f8:d9:a3 shinjaehun@losttemple
The key's randomart image is:
+--[ RSA 2048]----+
|o .   .          |
|o+...+           |
|++++.o+          |
|=.o.o...         |
|.o o + S         |
|. . + o          |
| . .             |
| E               |
|                 |
+-----------------+

공개키, 개인키가 만들어졌습니다. 이제 접속 대상 시스템에 공개키를 전송해야 합니다. 여러 방법이 있습니다만 우분투에서는 ssh-copy-id 명령으로 이 과정을 쉽게 처리할 수 있습니다. ssh-copy-id [사용자 계정]@[접속 대상 서버] 형식으로 공개키를 전송할 대상을 지정합니다. 아직 패스워드 인증으로 SSH 서버를 운영하고 있으므로 ssh-copy-id 명령을 실행할 때 접속 대상 서버의 사용자 이름과 패스워드 입력이 필요합니다. 공개키가 접속할 서버의 사용자 홈 디렉터리로 복사됩니다(/home/administrator/.ssh/authorized_keys).

shinjaehun@losttemple:~$ ssh-copy-id administrator@192.168.122.201
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any 
that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now 
it is to install the new keys
administrator@192.168.122.201's password: ********

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'administrator@192.168.122.201'"
and check to make sure that only the key(s) you wanted were added.
이렇게 하세요!

ssh-copy-id 명령이 처리하는 과정은 다음과 같습니다.

1. 접속 대상 서버의 사용자 홈 디렉터리(/home/administrator)에 .ssh 디렉터리를 만듭니다.

2. .ssh 디렉터리의 허가권을 0700으로 설정합니다.

3. scp 명령을 사용해서 공개키를 생성한 디렉터리에 authorized_keys라는 이름으로 복사합니다.

원리를 이해한다면 ssh-copy-id 대신 직접 다음과 같이 명령을 실행해서 공개키를 전송할 수 있습니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.201 "mkdir .ssh"
shinjaehun@losttemple:~$ ssh administrator@192.168.122.201 "chmod 0700 .ssh"
shinjaehun@losttemple:~$ scp .ssh/id_rsa.pub administrator@192.168.122.201:.ssh/authorized_keys

이제 SSH 서버 설정 파일을 편집기로 열어서 패스워드 인증 기능을 해제하고 공개키 인증을 활성화합니다.

administrator@server01:~$ sudo vi /etc/ssh/sshd_config

공개키 인증 기능을 사용하기 위해 PubkeyAuthentication의 값은 yes여야 합니다. AuthorizedKeysFile 옵션은 활성화되지 않더라도 기본값으로 클라이언트의 공개키를 [사용자 홈 디렉터리]/.ssh/authorized_keys로 저장합니다.

PubkeyAuthentication yes
#AuthorizedKeysFile      %h/.ssh/authorized_keys

패스워드 인증 기능을 해제합니다. PasswordAuthentication 옵션을 주석 해제하고 값을 no로 변경합니다. 설정 파일을 저장하고 프롬프트로 나갑니다.

PasswordAuthentication no

변경된 설정 파일을 적용하기 위해 ssh 서비스를 재시작합니다.

administrator@server01:~$ sudo service ssh restart

ssh 명령으로 SSH 서버에 접속해보겠습니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.201

‘Unlock private key’ 창이 뜨면 여기에서 묻는 ‘암호’는 administrator 계정의 패스워드가 아니라 잠겨있는 개인키를 활성화하기 위한 패스구문(passphrase)입니다. SSH 키를 생성할 때 설정했던 패스구문을 입력해야 합니다.

그림 6-7 암호에 패스구문을 입력
Tip

만약 ssh-keygen으로 키를 생성하는 과정에서 패스구문을 입력하지 않았다면 Unlock private key 창은 나타나지 않습니다. 패스구문에 대해서는 ‘공개키를 이용한 사용자 인증’에서 설명했습니다.

올바른 패스구문을 입력하면 SSH 서버 접속에 성공합니다.

shinjaehun@losttemple:~$ ssh administrator@192.168.122.201
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic i686)
...
Last login: Mon Oct 27 22:48:24 2014 from losttemple
administrator@server01:~$
이렇게 하세요!

만일 문제가 발생한다면 공개키와 개인키가 저장된 ~/.ssh 디렉터리의 소유권과 허가권을 확인해볼 필요가 있습니다. 개인키인 id_rsa는 허가권이 0600, 다른 파일은 0655 이상이어야 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.