SSH 키 기반 인증 시스템을 사용하는 이유
대부분의 사람들이 UNIX 기반 서버에 SSH를 통해 접속할 때 비밀번호를 입력하여 접속합니다.
하지만 비밀번호 인증 방식의 보안적 문제로 인해 SSH 키 기반 인증을 권장하고 있습니다.
SSH 키 기반 인증 시스템의 장점은 다음과 같습니다.
- SSH 키 자체가 매우 길고 복잡하여 알아내기 쉽지 않음
- 원격으로 직접 키가 전송되지 않아 키 로깅 어택 등에 강함
- 비밀번호처럼 특정 패턴으로 작성되거나 같은 비밀번호를 여러 사이트에 돌려쓰지 않음
- 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]-----+
키 생성이 완료됐다면 아래의 명령어를 입력해 서버에 키를 등록해주세요.
username과 remote_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
참고자료
'Tips > Linux' 카테고리의 다른 글
[Linux] CentOS 7 RAID1 디스크 용량 확장하기 (0) | 2022.09.01 |
---|---|
[Linux] Linux Timezone 변경하기 (0) | 2021.12.02 |
[Linux] Ubuntu Server 20.04 RAID 구성하기 (2) | 2021.11.24 |
[Linux] Ubuntu Server 20.04 설치하기 (0) | 2021.11.24 |
[Linux] CentOS 7 RAID 구성하기 (0) | 2021.11.15 |