![[Server/ssh] SSH 접속 및 private, public key 이해하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcFzzpJ%2FbtsQtNvp5jL%2FAAAAAAAAAAAAAAAAAAAAAJS_q3w_5IIMOX3Ip109xQ7N3HgYCeco0l72-_e7q_fD%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1761922799%26allow_ip%3D%26allow_referer%3D%26signature%3DjaMClmxzp5ooPPcTrxcSKgHNY8A%253D)
[Server/ssh] SSH 접속 및 private, public key 이해하기Deployment/Server2025. 9. 10. 23:04
Table of Contents
728x90
1. SSH 접속과 키 기반 인증 이해하기
ssh 접속이란?
ssh는 네트워크를 통해서 원격 서버에 안전하게 접속하기 위한 프로토콜이다. 단순한 Telnet과 달리 모든 데이터를 암호화 해서 전송해서 보완성이 더 좋다.
ssh 접속 시퀀스
ssh접속은 다음 단계로 진행된다.
- TCP 연결
클라이언트 (접속하는 PC or VM)이 서버의 22번 포트로 연결을 시도함 - 서버 Hosy Key 확인
서버는 자신을 증명하기 위한 Host Key를 제공함
클라이언트는 known_hosts 파일을 확인해서 이전에 본적있는 서버인지 검증
이때 known_hosts에 없는 경우는 다른로직을 진행한다. 이는 서버 설정에 따라 진행된다. - 인증
두가지 방식이 있다.
1. 비밀번호 인증 : 서버 계정 비밀번호를 입력 -> 보안 취약점 높음
사유로는 피싱, 재사용, 추측/대입 브루트포스 공격, 클라이언트 감염, 서버 해시 털리면 파급력 큼
2. 키 기반 인증 : Public/Private key 쌍을 사용 -> 안전하고 자동화에 적합함
서버에는 공개 키만 저장됨으로 서버가 침해되도 비밀키가 털리지 않음
또한 무차별 대입 불가, MITM 저항성(공격자가 중간에 있어도 비밀키 없이 서명 만들수없음) - Challenge/Response (키 인증 과정)
Challenge란 서버가 Pirvate Key를 가지고있냐를 확인하기 위한 무작위 난수 데이터
Pulic Key로 암호화하고 Private Key로 복호화 할수 있다.
서버는 등록된 Public Key를 사용해서 Challenge를 생성
클라이언트는 자신의 Private Key로 Challenge를 복호화함
서버는 결과를 검증하고 올바른 Private Key인지 확인함 - 세션 성립
인증 성공으로 암호화 채널이 열리고, 이후 모든 명령어/데이터가 암호화 되어서 오감 - 세션 유지
KeepAlive 메시지로 연결 상태를 유지함, 필요시 Rekey로 세션 재 검증 - 세션 종료
클라이언트가 exit 명령이나 네트워크 단절
서버 세션 리소스 해제한후
양쪽 모두 TCP 연결을 종료함
Public, Private Key 관리 방식
- Public Key
서버의 ~/.ssh/authorized_keys에 보통 저장됨
공개되도 보안상 문제가 크지 않음 - Private Key
클라이언트에 저장됨
절대로 유출되며 안됨
2개는 무조건 쌍으로 존재해야한다.
여기서 PEM과 PPK 차이는?
같은 키지만 데이터를 다른 형식으로 저장함
- PEM (Privacy Enhanced Mail)
OpenSSH 계열에서 사용하는 기본 포맷
AWS ECS등에서 .pem을 내려받아서 ssh -i key.pem user@host 등으로 접속 가능함 - PPK (PuTTY Private Key)
윈도우 전용 SSH 클라이언트인 PuTTY에서 사용하는 포맷
.pem 키를 PuTTYgen 도구로 .ppk로 변환해야 PuTTY에서 접속 가능함
세션 암호화 방식
비대칭키 암호화 (private, public)
키가 2개 쌍으로 대칭이 아니라 비대칭키라고 부른다.
쉽게 설명해서 공기키는 우체통(누구나 편지를 넣을수있음), 개인키는 열쇠이다.(편지를 열수 있는 사람은 나뿐)
생성방식
대표적인 알고리즘으로 RSA, ECDSA, Ed25519 등이있다.
RSA : 큰 소수를 두개 뽑아서 n = p x q 를 만들고, 지수 e, d를 계산 -> (e, n) = 공개 키, (d, n) = 개인키이다.
ECDSA, Ed25519 : 타원곡선 위에서 스칼라 곱 연산을 이용해서 key를 만든다.
주로 rsa를 많이 사용한다.
장단점
- 비대칭키는 보안이 강력하지만 속도가 느리다. 수학적 연산을 계속 해야하기 때문
- 데이터 크기 제한도있다. RSA는 2048bit보다 긴 데이터를 암호화할수 없다.
- 리소스 낭비도 한다. 서버 클라이언트가 대량 파일 전송 시마다 비대칭 연산을 하기 때문이다.
세션 키 교환
SSH는 비대칭으로 통신하기엔 제약이 따라서 DH(Diffie-Hellman) 대칭 키 교환을 한다.
대칭이라는 뜻은 같은 열쇠를 같이 쓰는 방식이라고 이해하면 편하다
- 클라이언트와 서버는 각각 랜덤 비밀값(secret)을 생성한다.
클라이언트: aa서버: bb - 공개된 파라미터 g,pg, p를 바탕으로 계산:
클라이언트: gamod pg^a \mod p → 서버에 전송
서버: gbmod pg^b \mod p → 클라이언트에 전송 - 각자 계산:
클라이언트: (gb)amod p=gabmod p(g^b)^a \mod p = g^{ab} \mod p서버: (ga)bmod p=gabmod p(g^a)^b \mod p = g^{ab} \mod p
색깔 비유 (쉬운 이해)
- 공개 색깔: 파랑
- 클라이언트 비밀 색: 빨강 → (파랑+빨강=보라) → 서버에 전송
- 서버 비밀 색: 노랑 → (파랑+노랑=초록) → 클라이언트에 전송
- 클라이언트: (초록+빨강=갈색), 서버: (보라+노랑=갈색)
- 공격자는 파랑, 보라, 초록만 알지만 “갈색”은 못 만듦
여기서 “갈색”이 바로 세션 키다.
데이터 전송 단계
이렇게 세션 키가 확정되면 이후는 대칭키 암호화로 진행된다.
사용 알고리즘 : AES, ChaCha20 등이있다.
또한 데이터가 변조되지 않았는지도 확인한다.
각 패킷에는 MAC(Message Authentication Code) 가 붙는다. 이로인해서 공격자가 패킷을 중간에 바꿔치기해도 검출할수 있다.
728x90
'Deployment > Server' 카테고리의 다른 글
[Server/Linux] ubuntu 기반 VM ssh key 등록 (0) | 2025.09.10 |
---|---|
[Server/NGINX] NGINX 설치 & 설명에 대한 모든 것 (0) | 2024.12.06 |
@코딩하는 자연대생 :: 자연대생도 코딩을 하고 싶어