본문 바로가기

리눅스

우분투에서 SSH 인증서를 사용한 SSH 인증을 구성하고 설정하는 방법

반응형

우분투에서 SSH 인증서를 사용한 SSH 인증을 구성하고 설정하는 방법

테스트 서버 구성

호스트 이름 아이피 주소 역할 비고
node1 192.168.10.111 CA 서버  
node2 192.168.10.112 SSH 서버  
node3 192.168.10.113 SSH 클라이언트  

1. CA (Certificate Authority) 서버 설정

CA 키 쌍 생성(node1)

CA 서버에서 SSH CA 키 쌍을 생성합니다. 이 키는 다른 SSH 키를 서명하고 인증서를 발급하는 데 사용됩니다.

sudo ssh-keygen -f /etc/ssh/ssh_ca -C "SSH CA Key"
  • /etc/ssh/ssh_ca는 CA의 개인 키 파일입니다.
  • /etc/ssh/ssh_ca.pub는 CA의 공개 키 파일입니다.
root@node1:~$ sudo ssh-keygen -f /etc/ssh/ssh_ca -C "SSH CA Key"

2. 클라이언트에서 SSH 키 생성

사용자 SSH 키 생성(node3)

클라이언트에서 SSH 키 쌍을 생성합니다. 이 키는 사용자가 SSH 서버에 접속할 때 사용할 기본 SSH 키입니다.

ssh-keygen -f ~/.ssh/id_rsa -C "user1@node3"
  • ~/.ssh/id_rsa는 개인 키 파일입니다.
  • ~/.ssh/id_rsa.pub는 공개 키 파일입니다.
user1@node3:~$ ssh-keygen -f ~/.ssh/id_rsa -C "user1@node3"

클라이언트 공개 키 전달(node3)

생성한 공개 키를 CA 서버(node1)로 복사합니다.

scp ~/.ssh/id_rsa.pub user1@192.168.10.111:/tmp/id_rsa.pub
user1@node3:~$ scp ~/.ssh/id_rsa.pub user1@192.168.10.111:/tmp/id_rsa.pub

3. 클라이언트 SSH 키에 CA로 서명

CA 서버에서 클라이언트 SSH 공개 키에 서명하여 인증서를 발급합니다.

클라이언트 공개 키에 서명(node1)

CA 서버에서 클라이언트의 공개 키를 서명하여 인증서를 생성합니다.

sudo ssh-keygen -s /etc/ssh/ssh_ca -I user1_cert -n user1 -V +52w -z 1 /tmp/id_rsa.pub
  • -s /etc/ssh/ssh_ca : 서명을 위해 사용할 CA의 개인 키입니다.
  • -I user1_cert : 인증서의 식별자입니다.
  • -n user1 : 이 인증서를 사용할 사용자 이름입니다.
  • -V +52w : 인증서의 유효 기간을 52주(1년)로 설정합니다.
  • -z 1 : 인증서의 서명 순서 번호입니다.
  • ~/.ssh/id_rsa.pub : 서명할 공개 키 파일입니다.

서명이 완료되면 /tmp/id_rsa-cert.pub라는 인증서 파일이 생성됩니다.

root@node1:~$ sudo ssh-keygen -s /etc/ssh/ssh_ca -I user1_cert -n user1 -V +52w -z 1 /tmp/id_rsa.pub
Signed user key /tmp/id_rsa-cert.pub: id "user1_cert" serial 1 for user1 valid from 2024-09-02T23:15:00 to 2025-09-01T23:16:41

인증서 배포(node1)

생성된 인증서를 클라이언트로 복사합니다.

scp /tmp/id_rsa-cert.pub user1@192.168.10.113:/home/user1/.ssh/
root@node1:~$ scp /tmp/id_rsa-cert.pub user1@192.168.10.113:/home/user1/.ssh/

4. SSH 서버 설정

서버에서 CA의 공개 키를 신뢰할 수 있도록 SSH 서버를 구성합니다.

CA 공개 키 배포(node1)

CA 서버의 공개 키를 SSH 서버(node2)에 복사합니다.

scp /etc/ssh/ssh_ca.pub user1@192.168.10.112:/tmp/ssh_ca.pub
root@node1:~$ scp /etc/ssh/ssh_ca.pub user1@192.168.10.112:/tmp/ssh_ca.pub

SSH 서버(node2)에서 공개 키를 /etc/ssh/ 디렉토리로 이동합니다.

sudo mv /tmp/ssh_ca.pub /etc/ssh/ssh_ca.pub
root@node2:~$ mv /tmp/ssh_ca.pub /etc/ssh/ssh_ca.pub

SSH 서버 설정 파일 수정(node2)

SSH 서버 설정 파일(/etc/ssh/sshd_config)을 편집하여 CA의 공개 키를 신뢰하도록 설정합니다.

sudo vim /etc/ssh/sshd_config
TrustedUserCAKeys /etc/ssh/ssh_ca.pub

SSH 서버 재시작

설정이 적용되도록 SSH 서버를 재시작합니다.

sudo systemctl restart sshd

5. 클라이언트에서 SSH 인증서 사용

클라이언트에서 SSH 인증서를 사용하여 SSH 서버(node2)에 접속합니다.

SSH 연결 테스트(node3)

SSH 인증서를 사용하여 서버에 접속합니다.

ssh -i ~/.ssh/id_rsa user1@192.168.10.112
user1@node3:~$ ssh -i ~/.ssh/id_rsa user1@192.168.10.112
The authenticity of host '192.168.10.112 (192.168.10.112)' can't be established.
ED25519 key fingerprint is SHA256:0UuT2OuVc50J4PD7OvBDzLPWA/JvRqVC4aHfhxDr2S4.
This host key is known by the following other names/addresses:
    ~/.ssh/known_hosts:1: [hashed name]
    ~/.ssh/known_hosts:4: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
...

user1@node2:~$

6. 호스트 키 서명(선택 사항)

서버 호스트 키에 서명하여 클라이언트가 서버의 호스트 키를 신뢰할 수 있도록 설정할 수도 있습니다.

서버 호스트 키 서명(node1)

서버의 호스트 키를 서명하여 클라이언트가 호스트를 신뢰하도록 할 수 있습니다.

sudo ssh-keygen -s /etc/ssh/ssh_ca -I node2_host -h -n node2 -V +52w /etc/ssh/ssh_host_rsa_key.pub
root@node1:~$ sudo ssh-keygen -s /etc/ssh/ssh_ca -I node2_host -h -n node2 -V +52w /etc/ssh/ssh_host_rsa_key.pub
Signed host key /etc/ssh/ssh_host_rsa_key-cert.pub: id "node2_host" serial 0 for node2 valid from 2024-09-02T23:23:00 to 2025-09-01T23:24:13

서버 호스트 키 배포(node1)

서버 호스트 키를 SSH 서버(node2)에 복사합니다.

scp /etc/ssh/ssh_host_rsa_key.pub user1@192.168.10.112:/tmp/ssh_host_rsa_key.pub
root@node1:~$ scp /etc/ssh/ssh_host_rsa_key.pub user1@192.168.10.112:/tmp/ssh_host_rsa_key.pub

서명된 호스트 인증서 배포(node2)

서명된 호스트 인증서를 /etc/ssh/에 배치합니다.

sudo mv /tmp/ssh_host_rsa_key.pub /etc/ssh/
root@node2:~$ sudo mv /tmp/ssh_host_rsa_key.pub /etc/ssh/

SSH 서버 설정 파일 수정(node2)

서버의 sshd_config 파일에 다음 줄을 추가하여 서명된 호스트 인증서를 사용하도록 설정합니다.

sudo vim /etc/ssh/sshd_config
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub

SSH 서버 재시작

SSH 서버를 재시작하여 설정을 적용합니다.

sudo systemctl restart sshd

 

이 과정을 통해 CA 서버에서 SSH 인증서를 발급하고 클라이언트가 SSH 인증서를 사용하여 서버에 접속할 수 있도록 설정했습니다. SSH 인증서는 중앙에서 관리할 수 있어 다수의 서버와 사용자가 있는 환경에서 유용합니다.

 

728x90
반응형