본문 바로가기
Tips/Linux

[Linux] SSH 키 기반 인증 시스템 구축하기

by DevJaewoo 2021. 12. 1.
반응형

SSH 키 기반 인증 시스템을 사용하는 이유

대부분의 사람들이 UNIX 기반 서버에 SSH를 통해 접속할 때 비밀번호를 입력하여 접속합니다.

하지만 비밀번호 인증 방식의 보안적 문제로 인해 SSH 키 기반 인증을 권장하고 있습니다.

 

SSH 키 기반 인증 시스템의 장점은 다음과 같습니다.

 

  1. SSH 키 자체가 매우 길고 복잡하여 알아내기 쉽지 않음
  2. 원격으로 직접 키가 전송되지 않아 키 로깅 어택 등에 강함
  3. 비밀번호처럼 특정 패턴으로 작성되거나 같은 비밀번호를 여러 사이트에 돌려쓰지 않음
  4. Brute-Force (무차별대입) 공격에 강함

 

이번 시간에는 SSH 키 기반 인증 시스템 구축 방법에 대해 알아보겠습니다.

 

준비물: SSH를 지원하는 서버


SSH 키 등록

클라이언트 터미널에서 아래의 명령어를 입력하여 SSH 키를 생성합니다.

명령어를 입력한 후 나오는 선택지에선 아무것도 입력하지 않고 Enter를 누르면 됩니다.

ssh-keygen -t rsa
ajw@ubuntu:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ajw/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ajw/.ssh/id_rsa
Your public key has been saved in /home/ajw/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:L0raR26bL44F1WlIcbYlVGFTX0xp9swcSRUeKuMsVAU ajw@ubuntu
The key's randomart image is:
+---[RSA 3072]----+
|        oo=EO+o*O|
|       . =.* .oB+|
|        o.=o .o=+|
|       ...o o   =|
|      . S. o     |
|       ....      |
|      .oo .      |
|     + +=o       |
|    . ++++.      |
+----[SHA256]-----+

 

키 생성이 완료됐다면 아래의 명령어를 입력해 서버에 키를 등록해주세요.

usernameremote_host는 서버의 IP와 로그인 하고자 하는 사용자 명에 따라 변경해주시면 됩니다.

ssh-copy-id -i .ssh/id_rsa.pub username@remote_host

 

입력하면 아래와 같은 선택지가 나오는데, yes를 입력하고 Enter를 눌러 진행하면 됩니다.

The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

 

아래와 같이 비밀번호를 입력하라는 메시지가 뜨면 비밀번호를 입력하고 Enter를 눌러 진행합니다.

/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
username@203.0.113.1's password:

 

이렇게 키가 추가되었다는 메시지가 뜨면 성공입니다.

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.

서버 비밀번호 인증 비활성화 

아래의 명령어를 통해 ssh 설정 파일을 열어줍니다.

sudo nano /etc/ssh/sshd_config

 

파일이 열렸다면 Ctrl + W를 누른 후, PasswordAuthentication yes 를 입력하고 Enter를 눌러줍니다.

PasswordAuthentication 뒤의 yes no로 바꿔준 후 Ctrl + S, Ctrl + X를 눌러 저장하고 종료합니다.

PasswordAuthentication no

 

설정을 반영하기 위해 아래의 명령어를 입력하여 SSH를 재시작합니다.

sudo systemctl restart ssh

SSH 연결 확인

클라이언트 PC에서 아래의 명렁어를 입력합니다.

ssh username@remote_host

 

아래와 같이 로그인이 되면 성공입니다.

Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-90-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Wed 01 Dec 2021 08:06:05 AM UTC

  System load:  0.08               Processes:                219
  Usage of /:   1.5% of 925.43GB   Users logged in:          1
  Memory usage: 7%                 IPv4 address for docker0: 172.17.0.1
  Swap usage:   0%                 Temperature:  38.0 C

 * Super-optimized for small spaces - read how we shrank the memory
   footprint of MicroK8s to make it the smallest full K8s around.

   https://ubuntu.com/blog/microk8s-memory-optimisation

1 update can be applied immediately.
To see these additional updates run: apt list --upgradable


*** System restart required ***
Last login: Wed Dec  1 07:27:36 2021
ajw@ubuntu:~$

새로운 클라이언트 추가

만약 위와 같은 방법으로 비밀번호 인증을 해제했다면, 더 이상 copy 명령어를 통해 클라이언트를 추가할 수 없습니다.

비밀번호가 비활성화되어 copy 도중 비밀번호 입력 메시지가 뜨지 않고 바로 종료되기 때문입니다.

 

이런 경우 아래의 방법으로 클라이언트를 추가할 수 있습니다.

 

우선 이전과 같이 키를 생성해줍니다.

ssh-keygen -t rsa

 

이 때 생성된 id_rsa.pub 파일을 관리자에게 전달하고, 관리자는 파일을 열어 안에 있는 텍스트를 모두 복사합니다.

ssh-rsa AAAAB3NzaC1yc2EAAAADASDFQWEEFDFHvfgfRPHxnp2YWREyYCzZwiMdBiwv4ieXF+O8rZZIIBPlaDLAF/2UGoeT6HVuKOIFeWdfl87igQZy+1PAS34hiT+nJJBwZa0NnODWcn4SDZm63ccpYglhnPcgHMVKa2llN4rdguWQXT4n+vqulQVycqZs9mQ3xNONvfMh1FAR0w0HkWORAKOtUXEW9l2EZ2ClVvCRiQWoOpRcOwkRfm8Q04xdDSYPhAcDFmqSuwpEgN5Gji7nrHQSTDLCzt8Zd3N+vJyOwwNmROXAfYohfvSTOwz8p5KOrMp/I2QB6lZmYfzDz/Uj9E6KcJDFSFE/mYwxi+tv7/eznMSb3he52Pr Administrator@AJW

 

기존 사용자로 서버 연결 후 아래의 명령어를 입력해 인증 설정 파일을 열고, 복사한 내용을 모두 붙여넣기 합니다.

sudo nano ~username/.ssh/authorized_keys

 

 

설정을 반영하기 위해 SSH를 재시작하고 접속이 되는지 테스트합니다.

sudo systemctl restart ssh

 


참고자료

반응형