SSH 키인증으로 비밀번호 없이 자동로그인 하기

이제는 서버 작업을 위해 필수인 SSH 인데요. 접속하려면 항상 비밀번호를 입력해야 하는 번거로움이 있었습니다.

여기서는 SSH 로그인을 키인증으로 대체하고 자동로그인을 하는 방법을 알아보겠습니다.

SSH 키인증은 비밀키(private key)와 공개키(public key)를 이용한 방식입니다. 동작방식에 대한 설명은 이 설명서의 범위를 벋어나므로 다른 페이지를 검색해 보시기 바랍니다.

클라이언트 측과 서버 측을 나눠서 각각 설명하도록 하겠습니다.

모든 설명은 우분투 리눅스(Ubuntu Linux) 배포본를 기준으로 합니다.

CLIENT SIDE : SSH 비밀키 만들기

ssh-keygen 을 이용해 먼저 비밀키 생성하는 명령어를 입력합니다.

$ ssh-keygen -t rsa

그러면 아래와 같이 비밀키를 저장할 경로를 물어봅니다. 기본적으로 그냥 엔터키를 입력하면 됩니다. (하지만 다수의 SSH에 자동로그인을 하는 경우 파일명을 id_rsa 에서 각 접속 서버별로 만들어서 조금더 보안을 강화할 수도 있습니다.)

Generating public/private rsa key pair.
Enter file in which to save the key (/home/doogle/.ssh/id_rsa): 

그리고 나서 비밀번호(passphrase) 입력을 물어보는데요. 여기서 비워두고 그냥 엔터를 쳐서 넘기면 자동로그인을 할 수 있습니다. 하지만 그만큼 보안적으로는 취약해집니다.

Enter passphrase (empty for no passphrase): 

재차 비밀번호를 확인합니다.

Enter same passphrase again: 

이제 아래와 같이 생성을 해줍니다.

Your identification has been saved in /home/doogle/.ssh/id_rsa.
Your public key has been saved in /home/doogle/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:bQdC8eY8lX551wvSwS3/sAmkzDUQ0QgLW0syD4DUGxc doogle@doogle-ubuntu
The key's randomart image is:
+---[RSA 3072]----+
| ..o..E.*o+=     |
|  . o .@ +..o..  |
|     +. = + *+ . |
|    .    O B..+..|
|        S X.+o+.+|
|         . o.o.=+|
|              o..|
|                 |
|                 |
+----[SHA256]-----+

이제 ~/.ssh 경로에 가보면 생성이 되어 있습니다. id_rsa 가 비밀키이고 id_rsa.pub 가 공개키입니다.

$ cd ~/.ssh
$ ls -al
drwx------  2 doogle doogle 4096  2월  6 09:51 ./
drwxr-xr-x 53 doogle doogle 4096  2월  6 09:14 ../
-rw-------  1 doogle doogle 2610  2월  6 09:51 id_rsa
-rw-r--r--  1 doogle doogle  574  2월  6 09:51 id_rsa.pub

SERVER SIDE : SSH 공개키 저장

이제 client 쪽에서 생성한 SSH 공개키를 서버로 복사하면 된다.

$ scp ~/.ssh/id_rsa.pub doogle@doogle.link

만약 기본포트 22번이 아닌 다른 포트를 사용한다면 아래와 같이 사용하면 됩니다.

$ scp -P 포트번호 ~/.ssh/id_rsa.pub doogle@doogle.link:id_rsa.pub

비밀번호를 입력하면 이제 서버에 공개키가 저장됩니다.

doogle@doogle.link's password: ****
id_rsa.pub                                                           100%  574    36.0KB/s   00:00

서버에 SSH로 접속해서 (아직까지는 비밀번호를 입력해서 접속합니다.) 파일이 저장되었는지 확인합니다.

$ ls -al

doogle@doogle.link:~$ ls -al
total 44
drwxr-xr-x 4 doogle doogle 4096 Feb  6 10:24 ./
drwxr-xr-x 5 root   root   4096 Jan  9 16:44 ../
-rw------- 1 doogle doogle  274 Jan 20 18:22 .bash_history
-rw-r--r-- 1 doogle doogle  220 Jan  9 16:33 .bash_logout
-rw-r--r-- 1 doogle doogle 3771 Jan  9 16:33 .bashrc
drwx------ 2 doogle doogle 4096 Jan  9 16:34 .cache/
-rw------- 1 doogle doogle   10 Jan 10 18:09 .dbshell
drwx------ 3 doogle doogle 4096 Jan  9 16:34 .gnupg/
-rw-r--r-- 1 doogle doogle  807 Jan  9 16:33 .profile
-rw-r--r-- 1 doogle doogle  574 Feb  6 10:24 id_rsa.pub

만약 .ssh 경로나 authorized_keys 파일이 없다면 아래와 같이 만들어줍니다.

doogle@doogle.link:~$ mkdir ~/.ssh
doogle@doogle.link:~$ touch ~/.ssh/authorized_keys

공개키를 authorized_keys 파일에 추가합니다.

doogle@doogle.link:~$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

자동로그인 테스트하기

이제 모든 준비는 끝났습니다. 마지막으로 자동로그인을 테스트 해보겠습니다.

다시 클라이언트쪽으로 돌아와서 아래와 같이 접속을 시도해 봅니다.

$ ssh doogle.link

혹은 별도의 포트번호를 사용하고 있다면...

$ ssh -p 포트번호 doogle.link

비밀번호 입력없이 로그인이 될 것입니다.

만약 비밀키 경로가 ~/.ssh/id_rsa 가 아니라면 -i 옵션으로 지정해 주면 됩니다.

$ ssh -i ~/.ssh/doogle.link.pem doogle.link

혹은 별도의 포트번호를 사용하고 있다면...

$ ssh -i ~/.ssh/doogle.link.pem -p 포트번호 doogle.link

만약 현재 클라이언트 아이디와 다른 아이디로 서버에 접속한다면...

$ ssh -i ~/.ssh/doogle.link.pem -p 포트번호 아이디@doogle.link

이제 이걸 가지고 접속용 쉘스크립트를 만들어두면 편리합니다.

$ vi doogle.link.sh

#!/bin/sh
ssh -i ~/.ssh/doogle.link.pem -p 포트번호 아이디@doogle.link

# 저장후 (:wq)
# 실행권한을 주면 끝!

$ chmod 700 doogle.link.sh

# 이제 실행해보면 자동으로 서버 SSH에 접속이 됩니다.
$ ./doogle.link.sh

이상으로 SSH 자동로그인에 대해 알아봤습니다.
문의사항이나 잘못된 부분이 있으시면 아래 댓글로 문의주시기 바랍니다. ^^

즐겁게 서버 작업 하시기 바래요.~ ㅎㅎ