Ubuntu 22.04에서 SSH 공개키 인증을 설정하는 방법

안녕하세요. 지구 IDC 기술팀입니다.

오늘은 Ubuntu 22.04에서 SSH 공개키 인증을 설정하는 방법을 알아보겠습니다. SSH 공개키 인증은 클라이언트의 개인키와 서버에 등록한 공개키를 이용해 사용자를 확인하므로, 서버 계정 비밀번호를 반복해서 입력하는 방식보다 안전하고 자동화에도 적합합니다.

이 문서에서는 Ed25519 키 생성, ssh-copy-id와 수동 공개키 등록, 권한 교정, 로그인 검증, 비밀번호 인증 비활성화와 오류 해결 절차까지 단계별로 설명합니다. 비밀번호 인증을 끄기 전에는 반드시 별도의 새 터미널에서 공개키 로그인이 정상 작동하는지 확인해야 합니다.

적용 환경

항목 기준
서버 운영체제 Ubuntu 22.04 LTS
SSH 서버 openssh-server, ssh.service
클라이언트 Linux, macOS 또는 OpenSSH Client가 설치된 Windows
예시 서버 203.0.113.10, 사용자 admin_user, 포트 22

작업 전 준비사항

공개키를 처음 등록할 때는 비밀번호 인증 또는 서버 콘솔을 통해 대상 계정으로 접속할 수 있어야 합니다. 아래 예시의 IP 주소와 사용자명은 실제 환경에 맞게 변경하십시오.

  • 203.0.113.10: 실제 서버 IP 주소
  • admin_user: 공개키 로그인을 사용할 실제 사용자명
  • SSH 포트가 변경된 경우 -p 실제_포트 옵션 추가
  • 접속 장애에 대비한 호스팅 콘솔 또는 KVM 접근 수단 확보

대상 계정과 홈 디렉터리를 확인합니다.

getent passwd admin_user
id admin_user

일반적인 홈 디렉터리는 /home/admin_user이지만 환경에 따라 다를 수 있습니다. 이후 명령에서는 getent passwd로 확인한 실제 홈 디렉터리를 사용하십시오.

OpenSSH 서버 상태 확인

OpenSSH Server 설치 여부와 서비스 상태를 확인합니다.

dpkg -s openssh-server
systemctl is-active ssh.service
systemctl is-enabled ssh.service

패키지가 없거나 서비스가 실행되지 않는 새 서버라면 설치하고 활성화합니다.

sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable --now ssh.service

서비스와 실제 수신 포트를 확인합니다.

sudo systemctl status ssh.service --no-pager
sudo ss -lntp | grep sshd

기본 설정에서는 sshd가 TCP 22번 포트에서 수신합니다. 이미 비밀번호로 접속 중이라면 별도의 방화벽 변경 없이 공개키 등록을 진행할 수 있습니다.

클라이언트에서 SSH 키 생성

키 쌍은 실제로 SSH 접속을 수행할 클라이언트 PC에서 생성합니다. Ubuntu 공식 문서는 새 키에 Ed25519 알고리즘 사용을 권장합니다.

ssh-keygen -t ed25519 -C "[email protected]"

저장 경로는 기본값을 사용해도 됩니다. 생성되는 파일의 역할은 다음과 같습니다.

  • ~/.ssh/id_ed25519: 외부에 공개하면 안 되는 개인키
  • ~/.ssh/id_ed25519.pub: 서버에 등록할 공개키

키 파일과 공개키 지문을 확인합니다.

ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
ssh-keygen -lf ~/.ssh/id_ed25519.pub

정책상 RSA가 필요한 환경에서는 다음과 같이 4096비트 RSA 키를 생성할 수 있습니다.

ssh-keygen -t rsa -b 4096 -C "[email protected]"

서버에 공개키 등록

ssh-copy-id 사용

Linux 또는 macOS 클라이언트에서 다음 명령을 실행하면 대상 사용자의 ~/.ssh/authorized_keys에 공개키가 추가됩니다.

ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]

SSH 포트가 2222번이라면 다음과 같이 지정합니다.

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 [email protected]

ssh-copy-id가 없을 때 수동 등록

Linux 또는 macOS에서는 공개키를 SSH 표준 입력으로 전달할 수 있습니다.

cat ~/.ssh/id_ed25519.pub | ssh [email protected] 'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys'

Windows PowerShell의 OpenSSH Client에서는 다음과 같이 등록할 수 있습니다.

Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys"

서버에서 소유권과 권한을 교정합니다.

sudo mkdir -p /home/admin_user/.ssh
sudo touch /home/admin_user/.ssh/authorized_keys
sudo chown -R admin_user:admin_user /home/admin_user/.ssh
sudo chmod 700 /home/admin_user/.ssh
sudo chmod 600 /home/admin_user/.ssh/authorized_keys

경로 구성요소별 권한과 등록된 키 지문을 확인합니다.

namei -l /home/admin_user/.ssh/authorized_keys
sudo -u admin_user ssh-keygen -lf /home/admin_user/.ssh/authorized_keys

클라이언트에서 확인한 공개키 지문과 서버의 authorized_keys 지문이 일치해야 합니다. 공개키는 ssh-ed25519로 시작하는 한 줄 형식을 유지해야 합니다.

공개키 로그인 확인

현재 세션을 유지한 채 새 터미널에서 사용할 개인키를 명시하여 접속합니다.

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 [email protected]

키 생성 시 암호 문구를 설정했다면 서버 계정 비밀번호가 아니라 개인키의 암호 문구가 표시됩니다. 로그인 후 사용자와 서버 로그를 확인합니다.

whoami
echo "$SSH_CONNECTION"
sudo journalctl -u ssh.service -n 50 --no-pager

인증 과정의 상세 정보가 필요하면 클라이언트에서 디버그 출력을 확인합니다.

ssh -vvv -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 [email protected]

상세 출력에는 서버 주소와 사용자명 등 운영 정보가 포함될 수 있으므로 외부에 공유하기 전에 민감한 값을 제거하십시오.

검증 후 비밀번호 인증 비활성화

공개키 로그인만 허용하려는 경우에만 진행합니다. Ubuntu의 /etc/ssh/sshd_config는 일반적으로 /etc/ssh/sshd_config.d/*.conf를 먼저 포함하며, OpenSSH는 대부분의 지시어에서 먼저 읽은 값을 사용합니다. 중복 설정을 확인하십시오.

sudo grep -RniE '^[[:space:]]*(PubkeyAuthentication|PasswordAuthentication|KbdInteractiveAuthentication|AuthorizedKeysFile)[[:space:]]' \
  /etc/ssh/sshd_config /etc/ssh/sshd_config.d 2>/dev/null

sudo sshd -T | grep -E '^(pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication|authorizedkeysfile)'

다른 설정 조각보다 먼저 읽히도록 별도 파일을 생성합니다.

sudo tee /etc/ssh/sshd_config.d/00-public-key-auth.conf > /dev/null <<'EOF'
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF

문법 검사를 통과한 경우에만 서비스를 다시 시작합니다.

sudo sshd -t
sudo systemctl restart ssh.service
sudo systemctl is-active ssh.service
sudo sshd -T | grep -E '^(pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication)'

정상 적용 시 pubkeyauthentication yes, passwordauthentication no, kbdinteractiveauthentication no가 표시됩니다. 새 터미널에서 공개키 접속을 한 번 더 확인합니다.

ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 [email protected]

자주 발생하는 오류와 해결 방법

증상 확인 항목 해결 방법
Permission denied (publickey) 사용자명, 키 지문, authorized_keys, 서버 로그 접속 계정의 홈 디렉터리에 올바른 공개키를 다시 등록
계속 비밀번호를 요구함 namei -l, 개인키 경로, sshd -T .ssh 700, authorized_keys 600, 소유자 교정
Too many authentication failures SSH 에이전트가 여러 키를 제시하는지 확인 -o IdentitiesOnly=yes -i 개인키 사용
UNPROTECTED PRIVATE KEY FILE 클라이언트 개인키 권한 Linux/macOS에서 chmod 600 ~/.ssh/id_ed25519 실행
유효 설정이 예상과 다름 설정 조각 순서와 Match 블록 중복 지시어를 정리하고 sshd -t 재검사
Connection refused 또는 시간 초과 서비스, 포트, 방화벽, 외부 보안 정책 공개키 문제와 분리해 네트워크 경로부터 확인

기존 관리 세션에서 로그를 실시간으로 확인한 뒤 다른 터미널에서 다시 접속하면 거부 원인을 빠르게 찾을 수 있습니다.

sudo journalctl -fu ssh.service

서비스 설정 오류가 의심되면 다음 순서로 확인합니다.

sudo sshd -t
sudo systemctl status ssh.service --no-pager
sudo journalctl -u ssh.service -b --no-pager

문법 오류가 출력되면 표시된 파일과 줄을 수정하고, sshd -t가 아무 메시지 없이 성공할 때만 서비스를 다시 시작하십시오.

원상복구와 키 제거

비밀번호 인증 설정 복구

이 문서에서 만든 설정 조각을 제거하고 유효 설정을 다시 확인합니다.

sudo rm /etc/ssh/sshd_config.d/00-public-key-auth.conf
sudo sshd -t
sudo systemctl restart ssh.service
sudo sshd -T | grep -E '^(pubkeyauthentication|passwordauthentication|kbdinteractiveauthentication)'

특정 공개키 제거

등록된 지문을 확인하고 파일을 백업한 뒤, 삭제할 공개키 한 줄만 제거합니다.

sudo -u admin_user ssh-keygen -lf /home/admin_user/.ssh/authorized_keys
sudo cp /home/admin_user/.ssh/authorized_keys /home/admin_user/.ssh/authorized_keys.backup
sudo nano /home/admin_user/.ssh/authorized_keys
sudo chown admin_user:admin_user /home/admin_user/.ssh/authorized_keys
sudo chmod 600 /home/admin_user/.ssh/authorized_keys

여러 키가 등록된 경우 authorized_keys 파일 전체를 삭제하지 마십시오. 이 파일의 내용만 변경할 때는 일반적으로 SSH 서비스를 재시작할 필요가 없습니다.

관련 지구 IDC 기술자료

공식 참고자료

기관 문서 확인 내용 조회일
Canonical OpenSSH server 설치, 설정 조각, 문법 검사, Ed25519, ssh-copy-id, 로그
Ubuntu Manpages sshd_config(5) AuthorizedKeysFile과 인증 관련 지시어
Ubuntu Manpages authorized_keys(5) 키 형식, 권장 권한, StrictModes
Ubuntu Project List of releases Ubuntu 22.04 LTS 지원 기간

자주 묻는 질문

공개키를 등록하면 비밀번호 인증이 자동으로 꺼지나요?

아닙니다. 공개키 등록과 비밀번호 인증 허용 여부는 별도입니다. 공개키 로그인을 검증한 뒤 PasswordAuthentication no를 적용해야 합니다.

여러 PC에서 같은 서버에 접속할 수 있나요?

가능합니다. 각 PC에서 별도 키 쌍을 만들고 각 공개키를 authorized_keys에 한 줄씩 추가하는 방식을 권장합니다. 개인키 하나를 여러 장비에 복사하지 않는 것이 좋습니다.

authorized_keys 수정 후 서비스를 재시작해야 하나요?

일반적으로 필요하지 않습니다. authorized_keys는 새 인증 시 읽힙니다. sshd_config 또는 설정 조각을 변경한 경우에는 문법 검사 후 서비스를 다시 적용해야 합니다.

root 계정에 공개키를 등록해도 되나요?

기술적으로 가능하지만 일반 운영에서는 sudo 권한이 있는 일반 사용자로 로그인한 뒤 필요한 명령만 sudo로 실행하는 구성이 권장됩니다.

마무리

오늘은 Ubuntu 22.04에서 Ed25519 SSH 키를 생성하고 서버의 authorized_keys에 공개키를 등록한 뒤, 권한과 실제 인증 결과를 확인하는 방법을 설명드렸습니다.

현재 관리 세션을 유지한 상태에서 별도의 터미널로 공개키 로그인을 먼저 검증하고, 설정 문법과 유효 값을 확인한 뒤에만 비밀번호 인증을 비활성화하시기 바랍니다.

오늘 준비한 내용은 여기까지입니다. 다음에도 서버 운영에 도움이 되는 기술정보로 인사드리겠습니다.

  • 0 用户发现这个很有用
此文章对您是否有帮助?
« Back

Powered by WHMCompleteSolution