리눅스 SSH 공개키 인증 구성하기

CompTIABeginner
지금 연습하기

소개

이 실습에서는 원격 리눅스 서버에 안전하게 접속하기 위해 SSH 공개키 인증을 구성하고 사용하는 방법을 배웁니다. 이 방식은 기존의 비밀번호 기반 로그인 대신 암호화된 키 쌍을 사용하여 보안성과 편의성을 동시에 높여줍니다. 로컬 머신에 비밀로 보관할 개인키와, 접속 권한을 부여하기 위해 서버에 저장할 공개키를 생성하게 됩니다.

전체 과정은 크게 세 단계로 진행됩니다. 먼저, ssh-keygen 명령어를 사용하여 실습용 사용자를 위한 새로운 RSA 키 쌍을 생성하고, 비밀번호 구문 (passphrase) 을 추가하여 보안 계층을 강화합니다. 다음으로, ssh-copy-id 도구를 사용하여 공개키를 원격 서버의 인증된 키 파일로 안전하게 복사합니다. 마지막으로, SSH 를 통해 서버에 접속하여 비밀번호 대신 키 쌍을 이용한 인증이 정상적으로 작동하는지 테스트합니다.

이 실습은 단계별 안내를 통해 학습과 연습을 돕는 가이드형 실습입니다. 각 단계를 주의 깊게 따라하며 실무 경험을 쌓아보세요. 통계에 따르면 이 실습은 초급 수준이며, 97%의 높은 수료율과 학습자들로부터 100%의 긍정적인 평가를 받고 있습니다.

실습용 사용자 생성 및 RSA 키 쌍 생성

이 단계에서는 SSH 공개키 인증 실습을 위한 전용 사용자 계정을 먼저 생성한 후, RSA 암호화 키 쌍을 생성합니다. 이렇게 별도의 계정을 사용하면 기존 사용자 설정에 영향을 주지 않고 깨끗한 환경에서 실습을 진행할 수 있습니다.

실습용 사용자 생성

먼저, SSH 실습에 사용할 sshuser라는 이름의 새로운 사용자를 생성합니다.

sudo adduser sshuser

비밀번호 설정과 사용자 정보 입력 요청이 나타납니다. 이번 실습에서는 비밀번호로 password123을 입력하세요. 전체 이름 (Full Name), 방 번호 (Room Number) 등 선택 사항은 엔터 (Enter) 키를 눌러 건너뛰어도 됩니다.

Adding user `sshuser' ...
Adding new group `sshuser' (1001) ...
Adding new user `sshuser' (1001) with group `sshuser' ...
Creating home directory `/home/sshuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for sshuser
Enter the new value, or press ENTER for the default
 Full Name []:
 Room Number []:
 Work Phone []:
 Home Phone []:
 Other []:
Is the information correct? [Y/n] Y

RSA 키 쌍 생성

이제 키 쌍을 생성하기 위해 sshuser 계정으로 전환합니다. 이렇게 해야 해당 사용자의 홈 디렉토리에 키가 올바르게 생성됩니다.

sudo su - sshuser

현재 sshuser 권한으로 접속된 상태입니다. ssh-keygen 명령어를 사용하여 RSA 키 쌍을 생성합니다. -t 옵션은 생성할 키의 유형을 지정하며, 여기서는 rsa를 사용합니다.

ssh-keygen -t rsa

명령어를 실행하면 키를 저장할 위치를 묻는 메시지가 나타납니다. 기본 위치는 사용자 홈 디렉토리 내의 숨겨진 디렉토리인 ~/.ssh/id_rsa입니다. Enter 키를 눌러 기본 위치를 수락합니다.

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

다음으로 비밀번호 구문 (passphrase) 을 입력하라는 메시지가 나옵니다. 비밀번호 구문은 개인키에 보안 계층을 하나 더 추가하는 역할을 합니다. 이번 실습에서는 sshkey-password를 입력하세요. 확인을 위해 총 두 번 입력해야 합니다.

참고: 비밀번호 구문을 입력할 때 화면에는 아무런 글자도 표시되지 않습니다. 이는 보안을 위한 표준 방식입니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sshuser/.ssh/id_rsa
Your public key has been saved in /home/sshuser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:<FINGERPRINT_STRING> sshuser@ubuntu
The key's randomart image is:
+---[RSA 3072]----+
|      .. . .o..  |
|     .  . . o..  |
|      .  . = . . |
|       .  B o .  |
|        S= * .   |
|        o*B o .  |
|       .oO=B . . |
|      .o+*+oE. . |
|      .o*o=o.o.  |
+----[SHA256]-----+

키 생성이 완료되었습니다. 파일이 제대로 생성되었는지 확인해 봅시다. ls -l 명령어를 사용하여 ~/.ssh 디렉토리의 내용을 확인합니다.

ls -l ~/.ssh

다음과 같이 새로 생성된 키 파일들이 표시되어야 합니다.

total 8
-rw------- 1 sshuser sshuser 2610 Jun 30 10:30 id_rsa
-rw-r--r-- 1 sshuser sshuser  575 Jun 30 10:30 id_rsa.pub

파일 권한을 유심히 살펴보세요. 개인키인 id_rsa는 소유자만 읽고 쓸 수 있는 권한이 부여되어 있는 반면, 공개키인 id_rsa.pub는 다른 사용자도 읽을 수 있습니다. 개인키는 반드시 안전하게 보호해야 하며 절대로 타인과 공유해서는 안 됩니다.

ssh-copy-id 를 사용하여 서버에 공개키 복사하기

이 단계에서는 이전 단계에서 생성한 공개키를 SSH 서버로 복사합니다. 이 작업을 통해 해당 키가 인증을 받게 되며, 이후에는 비밀번호 대신 대응하는 개인키를 사용하여 로그인할 수 있게 됩니다. ssh-copy-id 도구는 서버의 올바른 위치에 키를 자동으로 설치해 주는 편리한 스크립트입니다.

이 실습에서는 단일 머신에서 클라이언트와 서버의 상호작용을 시뮬레이션합니다. sshuser 계정이 클라이언트 역할과 SSH 접속 대상 계정 역할을 동시에 수행하게 됩니다.

여전히 sshuser 계정 상태인지 확인하세요. 만약 labex 사용자로 돌아갔다면 다시 전환합니다.

sudo su - sshuser

이제 공개키를 복사할 준비가 되었습니다. ssh-copy-id 명령어는 원격 사용자 이름과 호스트 주소를 인자로 받습니다. 여기서는 로컬 머신 (서버 역할) 의 sshuser 계정을 지정하기 위해 sshuser@localhost를 사용합니다.

다음 명령어를 실행하세요.

ssh-copy-id sshuser@localhost

SSH 를 통해 localhost 에 처음 접속하는 경우, 호스트의 신뢰성을 확인하는 메시지가 나타납니다. yes를 입력하여 계속 진행합니다.

The authenticity of host 'localhost (::1)' can't be established.
ED25519 key fingerprint is SHA256:<FINGERPRINT_STRING>.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

도구가 id_rsa.pub 키를 찾은 후 sshuser 계정의 비밀번호를 묻습니다. 사용자를 생성할 때 설정했던 비밀번호인 password123을 입력하세요.

/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
sshuser@localhost's password:

Number of key(s) added: 1

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

키 하나가 성공적으로 추가되었다는 메시지가 출력됩니다. ssh-copy-id 명령어는 서버에 ~/.ssh 디렉토리가 없으면 자동으로 생성하고, 공개키를 ~/.ssh/authorized_keys 파일에 추가합니다.

이를 확인하기 위해 authorized_keys 파일의 내용을 열어볼 수 있습니다. 이 파일에는 id_rsa.pub 파일과 정확히 일치하는 키 내용이 들어있어야 합니다.

cat ~/.ssh/authorized_keys

출력 결과로 공개키를 나타내는 긴 문자열이 표시됩니다.

ssh-rsa AAAA...[long key string]...== sshuser@ubuntu

공개키 인증을 이용한 SSH 로그인 테스트

마지막 단계에서는 새로운 설정이 올바르게 작동하는지 확인하기 위해 SSH 로그인을 테스트합니다. 생성한 키 쌍을 사용하여 SSH 서버 접속을 시도합니다. 이때 사용자 비밀번호를 묻는 대신, 개인키에 설정한 비밀번호 구문을 입력하라는 메시지가 나타나야 합니다.

여전히 sshuser 계정 상태인지 확인합니다.

whoami

출력 결과로 sshuser가 나와야 합니다. 아니라면 다시 전환하세요.

sudo su - sshuser

이제 localhost로 SSH 접속을 시작합니다. 키 복사 과정에서 이미 한 번 접속했으므로 호스트 키는 이미 승인된 상태일 것입니다.

접속을 위해 다음 명령어를 실행합니다.

ssh sshuser@localhost

개인키의 비밀번호 구문을 입력하라는 메시지가 나타납니다. 1 단계에서 설정했던 sshkey-password를 입력하세요.

Enter passphrase for key '/home/sshuser/.ssh/id_rsa':

비밀번호 구문인 sshkey-password를 입력하고 Enter를 누릅니다. 올바르게 입력했다면 서버에 로그인되어 환영 메시지가 표시됩니다.

Welcome to Ubuntu 22.04.x LTS (GNU/Linux x.x.x-xx-generic x86_64)

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

Last login: Mon Jun 30 10:45:23 2024 from ::1
sshuser@ubuntu:~$

축하합니다! 공개키 인증을 사용하여 성공적으로 로그인했습니다. 이제 새로운 SSH 세션에 들어와 있습니다. 사용자 계정 비밀번호 (password123) 가 아닌 키 비밀번호 구문만 요청받았다는 점에 주목하세요.

새로운 SSH 세션에 있는지 확인하기 위해 환경 변수를 체크해 볼 수 있습니다.

echo $SSH_CONNECTION

접속 상세 정보가 표시된다면 SSH 세션에 있는 것이 맞습니다.

SSH 세션을 종료하고 원래 터미널로 돌아가려면 exit를 입력하고 Enter를 누릅니다.

exit

연결이 종료되었다는 메시지가 표시됩니다.

logout
Connection to localhost closed.

마지막으로 sshuser 계정에서 로그아웃하여 labex 사용자로 돌아갑니다.

exit

이제 전용 실습 사용자를 사용하여 SSH 공개키 인증을 성공적으로 구성하고 테스트를 마쳤습니다.

요약

이 실습에서는 원격 리눅스 서버에 안전하게 비밀번호 없이 접속하기 위해 SSH 공개키 인증을 구성하고 사용하는 방법을 배웠습니다. 먼저 키 기반 인증 설정을 위한 깨끗한 환경을 확보하기 위해 전용 실습 사용자 (sshuser) 를 생성했습니다. 그 다음 ssh-keygen 명령어를 사용하여 새로운 RSA 키 쌍을 생성했습니다. 이 과정에서 보안 강화를 위해 비밀번호 구문으로 보호되는 개인키와 그에 대응하는 공개키가 만들어졌습니다.

이어서 ssh-copy-id 도구를 사용하여 공개키를 서버의 인증된 키 파일로 안전하게 전송했습니다. 이 명령어는 ~/.ssh/authorized_keys 파일에 키를 자동으로 추가하여 해당 키 쌍의 접속 권한을 부여했습니다. 마지막 단계에서는 서버로의 SSH 세션을 시작하여 테스트를 진행했으며, 사용자 계정 비밀번호 대신 개인키의 비밀번호 구문을 통해 성공적으로 인증되는 것을 확인하여 공개키 인증이 올바르게 작동함을 검증했습니다.