SSH 인증·호스트 키와 연결 진단
SSH에서는 서버가 누구인지 확인하는 단계와 사용자가 접속 권한을 증명하는 단계를 구분합니다.
개념부터 찾아보기
정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.
이 노트에서 설명할 수 있게 되는 것
- 서버 호스트 키 검증과 사용자 공개키 인증을 순서대로 구분한다.
- known_hosts와 authorized_keys의 저장 주체·목적을 설명한다.
- 네트워크·협상·서버 신원·사용자 인증·세션 실패를 나눈다.
01TCP 연결 뒤 전송 보안·서버 인증·사용자 인증이 이어진다
- SSHSSH 클라이언트는 먼저 서버의 포트에 연결하고 버전과 알고리즘을 협상한다.
- 키 교환·세션키 교환으로 세션에 사용할 암호화 자료를 만들고 서버의 host key 서명을 검증하여 접속 상대를 확인한다.
- 이후 그 보호된 전송 위에서 을 수행하고 성공하면 셸·명령·파일 전송 등의 채널을 요청한다.
- 연결 성공이 곧 사용자 로그인 성공이라는 뜻은 아니다.
- 세션·개인키host key는 서버를 식별하는 장기 키이고 세션 암호화 키와 사용자 개인키는 역할이 다르다.
- 클라이언트의 는 이전에 신뢰한 서버 키를 기억하는 장소다.
- 경고경고가 나타났을 때 기록을 지워 메시지만 없애면 서버 재설치와 을 구분할 증거를 잃는다.
- 신뢰 가능한 콘솔 등 별도 경로의 지문과 대조한 뒤 의도한 변경인지 판단한다.
sshd 실행·22번 포트 수신·SSH 인증을 순서대로 확인하기
서비스 상태와 소켓 출력에서 서버 준비를 읽고, 실제 SSH 접속의 실패 단계를 구별한다.
실습 구성과 전제
- sshd status와 ss 출력은 서로 다른 시점의 화면이다. PID 906과 843이 다르므로 같은 의 동시 조회라고 꾸미지 않는다.
- 준비한 실습 서버와 사전에 확인한 를 사용한다. 주소와 계정은 문서용 값으로 바꾸었다.
실행 상태와 unit 이름을 확인한다
- 사례는 sshd.를 사용한다. status의 running과 Main PID로 현재 데몬 실행을 확인하고 enabled로 시작 설정을 읽는다.
- 이름이 ssh.인 배포판도 있으므로 unit 이름을 그대로 복사해 설치 실패로 단정하지 않는다. 가 살아 있다는 사실은 포트나 인증 설정이 맞다는 뜻까지 포함하지 않는다.
bashsystemctl status sshd.service --no-pager journalctl -u sshd.service -n 30 --no-pagersshd.를 사용하는 배포판의 조회 예시다.
원본 크기로 보기 ↗- sshd 서비스가 active (running)이며 enabled로 표시된다.
- Main PID는 906으로 나타나 서버 프로세스 식별을 제공한다.
확인 기준서비스 실패라면 네트워크 시험 전에 해당 unit의 설정 검사·시작 로그부터 확인한다.
소켓이 어느 주소·포트에서 수신하는지 읽는다
- 별도 ss 화면은 22번 포트가 ·에서 LISTEN인 상태를 보여 준다. 같은 출력에 있는 chronyd의 323 소켓은 SSH의 포트가 아니다.
- 주소가 loopback에만 묶인 경우와 모든 로컬 주소에 수신하는 경우는 외부 도달 조건이 다르다. LISTEN 이후에도 경로와 방화벽을 통과해야 한다.
bashss -lntp "sport = :22"SSH 기본 포트의 리슨을 좁혀 조회한다. 정보에는 추가 권한이 필요할 수 있다.
원본 크기로 보기 ↗- ss 출력에 22번 TCP LISTEN 행과 sshd 프로세스가 표시된다.
- chronyd의 323 포트 행은 별도 UDP 소켓으로 함께 나열되어 있어 프로토콜을 구분해야 한다.
확인 기준프로토콜·주소·포트·를 한 행 단위로 읽는다. 다른 시점의 PID 차이를 즉시 비정상으로 해석하지 않는다.
호스트 확인 뒤 사용자 인증과 명령 실행을 구별한다
- SSH 클라이언트는 연결 뒤 키 교환과 서버 확인을 수행하고 그다음 을 한다. 인증 후 원격 명령 채널을 열어 실행 결과를 받는다.
- 재구성 명령에서 host key verification failed, permission denied, 원격 명령의 비영 종료는 서로 다른 실패 단계다. 처음 보는 를 검증 없이 신뢰하도록 설정하지 않는다.
bashssh -v -o StrictHostKeyChecking=yes labuser@192.0.2.30 "id"신뢰 가 미리 등록된 실습 서버에 현재 자격 정보를 조회하는 예시다.
확인 기준서비스·리스너 조회만으로 로그인 성공을 주장하지 않는다. 사전에 등록한 신뢰 호스트에 한해 실제 클라이언트 로그와 명령 종료 상태를 확인한다.
실습에서 확인한 동작 원리
- 실행과 소켓 수신은 서버 준비를 보여 주며, 실제 암호화·신원 확인·은 클라이언트 연결에서 확인한다.
- 실패 메시지를 처리 단계에 맞추면 방화벽··사용자 권한 문제를 분리할 수 있다.
설정·출력 추가로 확인하기 55장
아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.
실습 화면 묶음 01 2장
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「ssh의 기본 포트는 22」 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 02 2장
원본 크기로 보기 ↗- 「일반 사용자 ssh 접근 불가」 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「일반 사용자 ssh 접근 불가」 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 03 4장
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 구성·동작 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「1. 연결 과정의 차이 (핸드셰이크)」 문맥에 삽입된 원본 구성·동작 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「1. 연결 과정의 차이 (핸드셰이크)」 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「1. 연결 과정의 차이 (핸드셰이크)」 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 04 1장
원본 크기로 보기 ↗- 「nmap -sV : 서비스 버전 탐지. ssh 에서 시도됨.」 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 05 1장
원본 크기로 보기 ↗- 「ssh」 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 06 1장
원본 크기로 보기 ↗- 「ssh 설정」 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 07 4장
원본 크기로 보기 ↗- 수업 원본 자료 · Telnet과 SSH 설정·접속 결과를 비교하는 실습. 원문에서 「시나리오 1. Telnet」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · Telnet과 SSH 설정·접속 결과를 비교하는 실습. 원문에서 「시나리오 2. SSH」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · Telnet과 SSH 설정·접속 결과를 비교하는 실습. 원문에서 「시나리오 2. SSH」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · Telnet과 SSH 설정·접속 결과를 비교하는 실습. 원문에서 「시나리오 2. SSH」에 배치된 그림 또는 화면이다.
실습 화면 묶음 08 10장
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「New Keys , 키 사용 확인 과정」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「전체 흐름」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「키 교환 : Diffie-Hellman Key Exchange」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「키 교환 : Diffie-Hellman Key Exchange」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「키 교환 : init」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「키 교환 : init」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「키 교환 : init」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「특이사항 : GNS 3 mobaXterm Telnet 연결」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「프로토콜 버전 협상」에 배치된 그림 또는 화면이다.
원본 크기로 보기 ↗- 수업 원본 자료 · 프로토콜 협상·키 교환·새 키 사용까지의 SSH 연결. 원문에서 「프로토콜 버전 협상」에 배치된 그림 또는 화면이다.
실습 화면 묶음 09 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 10 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 11 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 12 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 13 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 14 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 15 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 16 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 17 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 18 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 해당 절에 수록된 화면·도식이다.
실습 화면 묶음 19 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 MobaXterm 연결에 수록된 화면·도식이다.
실습 화면 묶음 20 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 ssh 인증키에 수록된 화면·도식이다.
실습 화면 묶음 21 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 ssh 인증키-수업에 수록된 화면·도식이다.
실습 화면 묶음 22 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 ssh 인증키-수업에 수록된 화면·도식이다.
실습 화면 묶음 23 1장
원본 크기로 보기 ↗- 학습 원본 · SSH·Telnet 원격 접속과 패킷의 실습-w10 putty로 vpc 접속하기에 수록된 화면·도식이다.
실습 화면 묶음 24 2장
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 25 10장
원본 크기로 보기 ↗- 「명령어」 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「명령어」 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「명령어」 문맥에 삽입된 원본 패킷 캡처이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 패킷 캡처이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 26 3장
원본 크기로 보기 ↗- 「시나리오1. (ssh 포트 일부 대역대에 permit)」 문맥에 삽입된 원본 명령·상태 출력이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「시나리오1. (ssh 포트 일부 대역대에 permit)」 문맥에 삽입된 원본 설정·관리 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 「시나리오1. (ssh 포트 일부 대역대에 permit)」 문맥에 삽입된 원본 실습·개념 참고 화면이다. SSH 인증·호스트 키와 연결 진단 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
동작·명령 참고 문서
02공개키 인증은 개인키를 전송하지 않고 소유를 증명한다
- 개인키·공개키의 위치사용자 개인키는 클라이언트에 두고 대응하는 공개키만 서버 계정의 에 등록한다.
- 세션·개인키클라이언트는 현재 세션에 결합된 인증 데이터에 개인키로 서명하고 서버는 허용된 공개키로 서명을 검증한다.
- 공개키공개키 파일을 갖고 있다는 사실만으로 서명을 만들 수 없으므로 공개키의 배포와 개인키의 보호가 다른 목적이다.
- 에는 매번 생성되는 서명이나 개인키를 저장하지 않는다.
- Passphrase의 보호 범위개인키 passphrase는 저장된 키 파일 보호에 관여한다.
- 접속할 때 쓰는 계정 암호와 같은 것이 아니다.
- 는 잠금 해제된 키로 서명 작업을 대신할 수 있지만 agent forwarding은 원격 호스트에서 그 서명 기능을 사용할 경로를 열 수 있으므로 별도 신뢰 판단이 필요하다.
- 자동화 계정의 키자동화 계정의 키는 사람이 쓰는 관리자 키와 분리하여 허용 출발지·명령·권한·회수 범위를 줄일 수 있다.
ssh-keygen -lf ~/.ssh/id_ed25519.pub
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
# 첫 줄: 사용자 공개키 지문, 둘째 줄: 서버 호스트키 지문
# 서로 다른 키이며 각 파일이 존재하는 해당 시스템에서 조회한다.교육용 예시. 실제 요청·발송·설정 변경을 실행한 결과가 아니다.
03계정 홈·권한·StrictModes가 키 선택에 미치는 영향
- sshdsshd는 대상 계정의 실제 홈과 설정된 AuthorizedKeysFile 경로에서 허용 키를 찾는다.
- 사용자 이름사용자 이름이 root라고 홈이 /home/root인 것은 아니므로 계정 데이터베이스를 기준으로 한다.
- 검사.ssh 디렉터리와 가 다른 사용자에게 쉽게 수정될 수 있으면 공격자가 자기 키를 추가할 수 있어 같은 검사가 소유권·쓰기 권한을 살핀다.
- 키 파일의 모드·소유자보통 .ssh는 0700, 는 0600처럼 보호하고 적절한 소유자를 둔다.
- 상위 홈 경로와 컨텍스트도 의미가 있다.
- 관리자 키 경로 OpenSSH의 관리자 계정은 별도 administrators_authorized_keys와 정책을 사용할 수 있어 경로·chmod를 그대로 적용하지 않는다.
- 개인키서버에 사용자 개인키를 만들어 남긴 뒤 압축 배포하는 방식은 개인키의 복사본과 전달 경로를 늘리므로 클라이언트 생성과 공개키 등록으로 분리한다.
getent passwd learner
namei -l /home/learner/.ssh/authorized_keys
stat -c "%A %U:%G %n" /home/learner/.ssh /home/learner/.ssh/authorized_keys교육용 예시. 실제 요청·발송·설정 변경을 실행한 결과가 아니다.
04SSH 설정 파일과 실제 연결 조건
- PubkeyAuthenticationPort와 ListenAddress는 리스너, PubkeyAuthentication과 PasswordAuthentication은 인증 방식, AllowUsers·AllowGroups·Deny 계열은 계정 허용 범위와 관계된다.
- Include·Match 조건Include로 여러 파일을 읽을 수 있고 Match 블록은 사용자·출발지 같은 조건에서 다른 정책을 적용한다.
- 파일 한 줄만 읽어서 최종 동작을 판단하기 어려운 이유다.
- sshd -Tsshd -t는 구문과 필요한 조건을 검사하고 sshd -T는 해석된 설정을 보여 준다.
- 연결별 적용 설정 조회-C로 연결 조건을 주면 해당 Match가 적용된 결과를 볼 수 있다.
- 사용자 키 선택클라이언트에서 IdentitiesOnly=yes와 -i를 지정하면 agent의 여러 키를 무작정 시도하는 대신 지정한 키로 범위를 좁힐 수 있다.
- ssh-keygen -Assh-keygen -A는 기본 위치에 없는 host key를 생성하는 동작이며 모든 사용자 키를 초기화하는 명령이 아니다.
sudo sshd -t
sudo sshd -T -C user=learner,host=client.example,addr=192.0.2.20
ssh -vvv -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 learner@server.example교육용 예시. 실제 요청·발송·설정 변경을 실행한 결과가 아니다.
05여러 인증 방식과 채널 권한은 별도 상태다
- 인증 정책 목록OpenSSH 에서 쉼표로 연결한 방식은 순서대로 모두 성공해야 하는 한 경로다. 공백으로 나눈 여러 목록은 허용되는 대안 경로를 표현한다.
- 두 단계 예시publickey,password는 공개키 성공 뒤 비밀번호까지 요구한다. publickey를 통과했다는 기록만으로 최종 로그인이 끝났다고 해석하면 남은 인증 단계를 놓친다.
- 키별 제한의 옵션은 그 키로 사용할 명령·터미널·포워딩 등의 범위를 제한할 수 있다. 같은 사용자 계정이라도 제시한 키에 따라 가능한 작업이 다를 수 있다.
- 서버 제한ForceCommand나 포워딩 관련 서버 정책은 인증 후 요청을 제한한다. 일반 성공과 셸·SFTP·포트 전달 허용은 각각 별도 결과다.
- 설정 적용 범위Match 조건은 연결 사용자와 주소 등에 따라 결과를 바꾼다. 파일에 특정 옵션이 존재한다는 사실보다 해당 연결 조건에서 해석된 설정을 읽어야 한다.
06공개키 제시부터 채널 거부까지 로그 추적
- 서버 확인가상 디버그 흐름에서 known host key 일치가 먼저 확인된다. 이것은 서버 신원 확인 결과이며 사용자의 허용 여부와는 다르다.
- 키 제시Offering public key는 클라이언트가 후보 키를 제시했다는 뜻이다. 키를 제시한 줄만으로 서버가 그 사용자의 인증을 완료했다고 보고하지 않는다.
- 서명과 추가 인증Server accepts key가 보여도 서명 처리나 추가 인증 정책이 남을 수 있다. 최종 Authenticated to에 해당하는 완료 단계까지 관찰한다.
- 작업 요청인증 완료 뒤 세션 채널·명령·포워딩을 요청한다. 예를 들어 포워딩이 administratively prohibited로 거부되면 로그인 키 교체보다 그 기능의 정책 경계를 조사한다.
- 결과의 범위인증은 성공했고 포워딩은 거부된 결과를 하나의 SSH 접속 실패로 뭉치지 않는다. 어느 단계까지 성공했는지 기록하면 다른 팀이 같은 경계를 재현할 수 있다.
[가상 흐름 요약 — 실제 로그 문구는 버전에 따라 다름]
known host key matches
Offering public key
Server accepts key
Authenticated to server
forwarding channel: administratively prohibited비밀값과 실제 주소가 없는 단계 해석용 예시. 실행 결과가 아니다.
07키 거부·인증 시도 초과·명령 실패를 구분하기
- 키 선택 오류agent에 여러 키가 있으면 허용된 키에 도달하기 전에 MaxAuthTries 제한을 만날 수 있다. 시도 순서와 IdentitiesOnly 적용 여부를 확인한다.
- 허용 파일 접근올바른 키인데 거부되면 계정 홈·AuthorizedKeysFile·소유권·쓰기 가능 상태·키별 옵션을 확인한다. 공개키가 어딘가에 저장되었다는 사실만으로 해당 계정이 허용한 것이 아니다.
- 추가 인증 대기공개키 뒤 비밀번호나 keyboard-interactive 단계가 남은 정책이면 비대화형 자동화가 멈추거나 실패할 수 있다. 키 인증 성공과 정책 전체 완료를 구분한다.
- 명령 종료 상태원격 명령의 0이 아닌 종료 상태는 SSH 전송 오류와 다를 수 있다. 전송 연결·채널·실행 프로그램의 stderr와 종료 상태를 각각 보존한다.
- 변경 불일치는 사용자 키 실패보다 앞선 서버 신뢰 문제다. 별도 경로로 교체 사실과 지문을 대조하기 전 기록을 지워 경고만 없애지 않는다.
08인증 뒤 채널·원격 명령·포워딩이 만들어지는 과정
- SSH·세션하나의 SSH 전송 연결 위에는 셸 세션, 명령 실행, 파일 전송 또는 포트 전달 같은 논리 채널을 만들 수 있다.
- ssh server commandssh server command는 원격에서 지정 명령을 실행하고 표준 출력·오류와 종료 상태를 받아오는 형태다.
- PTY와 자동화대화형 터미널 할당 여부에 따라 화면 제어·프롬프트·출력 버퍼링이 달라질 수 있어 자동화는 명령 실행과 interactive shell을 구분한다.
- 포워딩로컬 포워딩은 클라이언트가 지정 포트에서 받은 연결을 SSH를 통해 서버 쪽 목적지로 연결한다. 원격 포워딩은 서버 쪽에 리스너를 만드는 반대 배치이고 각 방향의 주소와 AllowTcpForwarding 같은 서버 정책이 노출 범위를 결정한다.
- SSHSSH의 암호화가 터널 끝의 별도 프로토콜에 무제한 권한을 주는 것은 아니다.
- 키 교환·연결·키 교환·host key··채널 요청 중 어느 단계에서 실패했는지를 -vvv와 서버 로그로 나누어 읽는다.
09자동화와 최소 권한
- 자동화용 계정자동화용 계정은 필요한 대상과 명령에만 접근하도록 구성한다.
- 자동화 자격증명의 분리일반 관리 계정의 광범위한 권한과 비밀번호를 코드에 넣으면 하나의 파일 유출이 여러 시스템의 문제로 이어질 수 있다.
- timeout·결과 확인연결 시간 제한과 명령 결과 확인도 필요하다.
- SSHSSH 에이전트 전달이나 포트 전달은 유용하지만 추가 접근 경로를 만들 수 있다.
- 포워딩의 접근 경계필요한 기능만 사용하고 어느 시스템이 키를 이용한 인증이나 내부 서비스 연결을 요청할 수 있는지 이해해야 한다.
ssh -V설치된 OpenSSH 클라이언트 버전을 조회한다. 원격 연결은 하지 않는다.
10서버를 확인한 뒤 사용자를 인증하기
- SSH클라이언트가 SSH 서버에 연결하면 프로토콜 협상과 키 교환 과정에서 서버의 와 관련 증명을 확인한다.
- 클라이언트는 신뢰된 정보와 일치하는지 판단하여 지금 연결한 서버가 기대한 대상인지 검증한다.
- 암호화된 연결암호화된 연결을 만들 수 있다는 사실과 올바른 서버에 연결했다는 사실은 다르다.
- 최초 신뢰처음 보는 키는 신뢰할 별도 경로로 지문을 확인하고, 기존 키가 바뀌었으면 서버 재설치·키 교체와 공격 가능성을 구분해야 한다.
- 공개키·개인 키사용자 공개키 인증에서는 클라이언트가 개인 키를 서버에 보내는 대신 해당 키를 사용할 수 있음을 서명 등으로 증명한다.
- 공개키서버는 그 사용자에게 허용된 공개키와 정책으로 이를 검증한다.
- 일반적인 는 서버 계정에 허용할 공개키의 목록이고, 는 클라이언트가 서버 신원을 확인하기 위한 정보다.
- 같은 공개키 형식을 볼 수 있어도 두 파일의 방향이 반대다.
- 세션인증 성공 뒤에도 계정·세션·명령 실행 제한에 따라 실제 셸이나 작업이 거부될 수 있다.
- 연결·키 교환네트워크 연결 뒤 지원 방식과 세션 키 교환을 협상한다.
- 서버 신원 증명서버 와 관련 서명을 클라이언트가 확인한다.
- 신뢰된 키와 대조기억한 또는 별도 신뢰 근거와 일치하는지 판단한다.
- 사용자 서명 제시개인 키를 보내지 않고 사용자 키 사용 능력을 증명한다.
- 허용 키 확인해당 계정의 공개키와 제한 정책에 따라 서명을 검증한다.
- 인증 후 세션 처리인증 결과와 계정·세션 정책에 따라 요청한 작업을 시작한다.
설명과 함께 보는 보조 도식
호스트 키와 사용자 키가 쓰이는 서로 다른 단계
기본적인 공개키 인증 사례이며 세부 키 교환 메시지는 축약한다.
연결·키 교환
네트워크 연결 뒤 지원 방식과 세션 키 교환을 협상한다.
- 실패 예
- 연결·알고리즘 협상
전체 단계를 한 번에 읽기
- 01
연결·키 교환
네트워크 연결 뒤 지원 방식과 세션 키 교환을 협상한다.
- 실패 예
- 연결·알고리즘 협상
- 02
서버 신원 증명
서버 호스트 키와 관련 서명을 클라이언트가 확인한다.
- 검증 대상
- 서버
- 03
신뢰된 키와 대조
기억한 호스트 키 또는 별도 신뢰 근거와 일치하는지 판단한다.
- 불일치
- 이유 확인 없이 삭제하지 않음
- 04
사용자 서명 제시
개인 키를 보내지 않고 사용자 키 사용 능력을 증명한다.
- 검증 대상
- 사용자
- 05
허용 키 확인
해당 계정의 공개키와 제한 정책에 따라 서명을 검증한다.
- 저장 위치 예
- authorized_keys
- 06
인증 후 세션 처리
인증 결과와 계정·세션 정책에 따라 요청한 작업을 시작한다.
- 인증 성공
- 모든 작업의 허용은 아님
11오류 메시지를 단계에 맞춰 해석하기
- 전송 연결 실패시간 초과나 연결 거절은 사용자 키를 검토하기 전에 주소·포트·경로·리스닝·방화벽을 확인할 단서다.
- 서버 신원 불일치 불일치는 사용자 비밀번호 오류가 아니라 서버 신원 확인 단계의 문제다.
- 공개키공개키 인증 거부에서는 계정 이름, 제시한 키, 서버 허용 목록과 파일 소유권·권한, 정책을 확인한다.
- 클라이언트클라이언트가 여러 키를 제시하면 시도 제한 때문에 예상 키에 도달하기 전에 실패할 수도 있으므로 실제 제시 순서도 관찰할 수 있다.
- 대화형·자동화 환경자동화에서는 처음 연결한 호스트를 무조건 신뢰하는 정책을 기본으로 삼지 않는다.
- 자동화의 접속 신뢰검증된 저장소, 비밀 공급 경로, 계정 권한과 접속 대상을 관리한다.
- 접속 후 명령 대기연결은 됐지만 명령이 멈춘 경우에는 비대화형 환경·권한 상승 입력·출력 버퍼·시간 제한을 구분한다.
- 디버그 로그디버그 로그를 공유할 때 사용자 이름과 경로 등 운영 정보를 정리한다.
- 개인 키에이전트 전달은 개인 키 파일을 복사하지 않더라도 원격 쪽에서 인증 동작을 요청할 능력을 줄 수 있으므로 별도의 신뢰 판단이 필요하다.
| 구성·관찰 대상 | 확인 정보 | 판단할 차이 |
|---|---|---|
| 네트워크 | 주소·포트·리스닝 | 인증 이전 연결 실패 |
| 지문·저장된 키 | 서버 교체와 잘못된 대상 | |
| 계정·제시 키·허용 키 | 잘못된 키와 정책 거부 | |
| 세션·명령 | 셸·환경·출력·종료 상태 | 인증 성공 후 실행 실패 |
이해했는지 확인하기
- 호스트 키와 사용자 인증 키의 역할을 구분한다.
- 호스트 키 변경 시 신뢰할 경로로 지문을 재확인한다.
- 인증 실패와 네트워크 실패를 나누어 진단한다.
