본문 바로가기

보안 이야기

SSH 접속 과정

 


단계 역할 진행 내용 RFC 사용 프로토콜/암호화 예시
1. TCP 연결 기본 통신 채널 수립 - 클라이언트가 서버(기본 22/tcp)에 연결
- TCP 3-way handshake 완료 후 통신 가능 상태
RFC 4251 (Overview) TCP/IP (전송 계층)
2. 프로토콜 버전 교환 SSH 버전 호환성 확인 - 클라이언트/서버가 지원하는 SSH 버전 교환
- 일반적으로 SSH-2.0 사용
RFC 4253 (Transport Layer Protocol) SSH-2.0-OpenSSH_8.7
3. 알고리즘 협상 (KEXINIT) 암호화 매개변수 합의 - 지원 가능한 암호 알고리즘 목록 교환
- 키 교환(KEX), 대칭 암호, MAC, 압축 방식 합의
RFC 4253 - KEX: diffie-hellman-group14-sha256, ecdh-sha2-nistp256
- 암호: aes256-gcm@openssh.com, chacha20-poly1305@openssh.com
- MAC: hmac-sha2-256, hmac-sha2-512
4. 키 교환 (Key Exchange) 세션 키 생성 - Diffie-Hellman, ECDH 등으로 shared secret 생성
- 서버 호스트키를 이용해 위변조 방지
RFC 4253 - DH, ECDH, Curve25519-sha256
5. 서버 인증 서버 신뢰성 보장 - 서버는 자신의 호스트키로 서명
- 클라이언트는 known_hosts와 비교하여 신뢰 여부 확인
RFC 4252 (Authentication)
RFC 4253
- RSA, Ed25519, ECDSA 공개키 기반 호스트키
6. 세션 암호화 시작 암호화 채널 활성화 - 협상된 세션 키로 데이터 암호화 개시
- 이후 모든 통신은 암호화 + 무결성 보장
RFC 4253 - AES-256-CTR, AES-128-GCM, Chacha20-Poly1305
7. 사용자 인증 클라이언트 사용자 검증 - 서버가 클라이언트 사용자 인증 요구
- 방법: 비밀번호, 공개키, Kerberos, GSSAPI
RFC 4252 - 공개키 인증: rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
- 비밀번호 인증: 단순 문자열 비교(보안 취약)
8. 세션 요청 및 채널 생성 실제 서비스 연결 - "ssh-connection" 서비스 요청
- 채널 생성 (예: shell, exec, port-forward, SFTP)
RFC 4254 (Connection Protocol) - 터미널 요청 (pty)
- exec 요청 (명령 실행)
- subsystem 요청 (SFTP 등)
9. 터미널/세션 활성화 최종 사용자 동작 - 사용자가 입력한 명령이 암호화되어 서버에 전달
- 서버 응답 또한 암호화되어 클라이언트로 전송
RFC 4254 - Bash/Zsh shell, SCP, SFTP