Ubuntu 26.04 강좌 / Ubuntu OpenSSH 서버와 키 인증 설정하기

Ubuntu SSH 키 인증은 서버의 실제 리스너를 확인하고 클라이언트 공개키만 등록한 뒤 새 연결로 시험해 구성합니다. 암호 인증을 제한하는 작업은 키 로그인과 관리자 권한 확인이 끝난 후에 진행하며 기존 관리 세션과 콘솔은 유지합니다.

서비스·소켓·주소 확인하기

sudo apt update
sudo apt install openssh-server
systemctl status ssh.socket ssh.service --no-pager
sudo ss -lntp
ip -br address

실제 리스너와 ssh.socket·ssh.service를 함께 확인합니다. 이 실습은 기존 SSH 포트를 유지합니다. VM 생성 강좌의 NAT+호스트 전용망에서 서버는 .20, Linux 클라이언트는 .10을 사용하고 키 명령은 .10 클라이언트에서 실행합니다. 설치 형태에 따라 비활성 unit 하나가 있어도 실제 리스너가 정상일 수 있습니다.

Ubuntu OpenSSH 안내는 설치와 설정 파일 우선순위, 검증 방법을 설명합니다.

Linux 클라이언트에서 command -v ssh와 command -v ssh-copy-id를 확인하고 없으면 sudo apt update && sudo apt install openssh-client로 준비합니다. 서버의 일반 사용자 이름은 설치 때 실제로 만든 값으로 바꿉니다. 처음 공개키를 등록할 인증 경로나 콘솔 접근을 먼저 확보하며, 이 실습을 위해 운영 서버의 인증 정책을 무조건 완화하지 않습니다.

서버 신원을 확인하고 클라이언트 키 만들기

서버 콘솔에서 sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub로 호스트 키 지문을 확인합니다. 클라이언트 첫 연결의 지문과 신뢰하는 경로로 대조합니다. 아래 키 생성·복사 명령은 서버가 아니라 Linux 클라이언트 터미널에서 실행합니다.

ssh-keygen -t ed25519 -f "$HOME/.ssh/ubuntu-lab-ed25519"
ssh-copy-id -i "$HOME/.ssh/ubuntu-lab-ed25519.pub" labuser@192.168.56.20

labuser와 주소는 실제 계정·서버 값으로 바꾸고 키 파일이 이미 있으면 덮어쓰지 않습니다. 키 암호를 설정하고 안전하게 보관하세요. 전송할 파일은 .pub 공개키이며 비밀키는 서버에 복사하지 않습니다. Windows 기본 SSH에는 ssh-copy-id가 없을 수 있어 위 복사 예시는 Linux 클라이언트를 기준으로 합니다.

새 연결에서 키 인증만 시험하기

ssh -i "$HOME/.ssh/ubuntu-lab-ed25519" -o IdentitiesOnly=yes -o PreferredAuthentications=publickey -o PasswordAuthentication=no labuser@192.168.56.20

키 암호 요청과 서버 계정 비밀번호 요청은 다릅니다. 이 연결이 성공하면 서버에서 whoami와 필요한 sudo 작업을 확인합니다. 실패하면 홈 디렉터리·.ssh·authorized_keys의 소유자와 권한, 실제 계정, 로그부터 조사합니다. 허용 권한을 777로 넓히지 않습니다.

실습 계정 정책과 설정 검증

새로 만든 단일 키 인증 전용 실습 서버에서 암호 로그인을 제한하려면 기존 SSH 설정을 백업하고 /etc/ssh/sshd_config.d/00-lab-auth.conf 같은 별도 파일을 검토합니다. 기존 MFA·조직 인증이 있는 서버에는 아래 정책을 그대로 적용하지 않습니다.

PubkeyAuthentication yes
AuthenticationMethods publickey
PasswordAuthentication no
PermitRootLogin no

OpenSSH는 많은 항목에서 먼저 읽은 값을 사용하므로 파일 이름만 믿지 말고 최종 설정을 확인합니다. Match 조건이 있다면 실제 사용자·클라이언트 조건을 반영한 sshd -T -C 조회도 필요합니다. 이 예시는 정책 설명용이며 개인 키 접속이 검증되기 전에는 적용하지 않습니다.

sudo sshd -t
sudo sshd -T | grep -E '^(pubkeyauthentication|authenticationmethods|passwordauthentication|permitrootlogin) '

적용·재부팅·복원 순서

구문이 정상이고 SSH 서비스가 실제 실행 중일 때 sudo systemctl reload ssh.service로 인증 설정을 다시 읽게 합니다. 이 실습은 포트를 바꾸지 않습니다. 소켓의 Port·ListenAddress까지 바꾸는 작업은 소켓 생성 설정과 daemon-reload 등 별도 절차를 검토해야 합니다.

기존 세션을 닫기 전에 새 키 로그인·sudo·허용되지 않은 인증의 거부를 시험합니다. 계획한 재부팅 뒤에도 다시 연결하고, 실패하면 콘솔에서 이번 설정 파일만 백업 상태로 되돌려 구문 검사와 적용을 반복합니다. 호스트 키가 달라졌다는 경고는 원인을 확인하기 전까지 무시하거나 무조건 삭제하지 않습니다.