SSH: 원격 액세스 보호
SSH 핸드셰이크와 호스트 키 인증을 살펴보고 SSH가 원격 세션을 보호하는 방식을 이해합니다.
SSH: 원격 액세스 보호은(는) CoddyKit의 무료 Cryptology Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cryptology Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
SSH-1과 SSH-2: 사용 중단의 역사
최초의 보안 셸 프로토콜인 SSH-1에는 근본적인 설계 결함이 있었습니다. 이 결함으로 인해 능동적 공격자가 탐지되지 않은 채 암호화된 세션에 임의의 데이터를 삽입할 수 있었습니다. 2006년에 RFC 4251-4254로 발표된 완전한 프로토콜 재설계 버전인 SSH-2는 전송 계층, 인증 계층 및 연결 계층 프로토콜을 분리하고 HMAC를 사용하여 더 강력한 무결성 검사를 수행함으로써 이러한 약점을 해결했습니다. SSH-1은 사용이 중단되었으며 최신 서버에서는 이를 활성화해서는 안 됩니다.
SSH 전송 계층: 암호화와 무결성
SSH 전송 계층 프로토콜은 초기 키 교환을 처리하고 암호화 및 무결성 보호가 적용된 채널을 설정합니다. 이 프로토콜은 키 교환(일반적으로 ECDH), 호스트 인증(일반적으로 Ed25519 또는 RSA), 대칭 암호화(일반적으로 AES-256-CTR 또는 ChaCha20-Poly1305) 및 MAC(일반적으로 HMAC-SHA2-256)에 사용할 알고리즘을 협상합니다. 이후의 모든 패킷은 협상된 알고리즘을 사용하여 암호화되고 무결성 검사를 받습니다.
SSH 사용자 인증 계층
전송 계층이 보호되면 사용자 인증 계층은 사용자가 서버에 자신의 신원을 증명하는 방법을 협상합니다. 일반적으로 사용되는 세 가지 방법은 비밀번호(사용자가 비밀번호를 입력하면 전송 계층을 통해 암호화되어 전송됨), 공개 키(사용자가 서버에 등록된 승인된 공개 키에 대응하는 개인 키를 보유하고 있음을 증명함) 및 GSSAPI(기업 환경을 위한 Kerberos 통합 로그인)입니다.
SSH 연결 계층: 다중화된 채널
SSH 연결 계층은 하나의 암호화된 전송 연결 위에서 여러 논리적 채널을 다중화합니다. 일반적인 SSH 세션에는 대화형 셸을 위한 채널 하나가 있습니다. 추가 채널은 포트 전달, X11 전달 및 SFTP 파일 전송을 지원하며, 모두 동일한 인증 및 암호화 연결을 공유합니다. 채널 요청을 통해 클라이언트는 의사 터미널을 요청하거나, 환경 변수를 설정하거나, 특정 명령을 실행할 수 있습니다.
호스트 키 검증과 TOFU
SSH 서버에 처음 연결할 때 클라이언트는 서버의 호스트 키를 받고 이를 신뢰할지 결정해야 합니다. 기본 정책은 최초 사용 시 신뢰(TOFU)입니다. 사용자에게 키 지문(일반적으로 SHA256:...과 같은 해시로 표시됨)을 확인하라는 메시지가 표시되며, 이를 수락하면 해당 키가 known_hosts 파일에 저장됩니다. 이후 연결할 때는 저장된 키를 서버가 제시하는 키와 비교하며, 일치하지 않으면 중간자 공격 가능성에 대한 강력한 경고가 표시됩니다.
known_hosts와 키 지문
~/.ssh/known_hosts에 저장되는 known_hosts 파일은 호스트 이름과 IP 주소를 기준으로 색인된 서버 호스트 키 데이터베이스를 관리합니다. 각 항목은 서버 주소를 해당 공개 키와 연결합니다. 서버의 키가 변경되면, 서버가 재설치되었거나 공격자가 서버를 사칭하는 경우일 수 있으므로 SSH는 연결을 거부하고 경고를 표시합니다. 관리자는 대규모 환경에서 TOFU 신뢰 결정을 피하기 위해 인증서 기반 호스트 인증을 사용합니다.
비밀번호 없는 로그인을 위한 authorized_keys
공개 키 인증에서는 사용자의 공개 키를 서버의 ~/.ssh/authorized_keys에 저장합니다. 사용자가 연결하면 서버는 공개 키로 암호화된 질의를 보내고, 일치하는 개인 키의 보유자만 올바르게 응답할 수 있으므로 개인 키나 비밀번호를 전송하지 않고도 신원을 증명할 수 있습니다. 개인 키는 네트워크를 통해 전송되지 않으며 피싱으로 탈취할 수도 없기 때문에 비밀번호보다 안전합니다.
SSH 키 알고리즘
SSH 키 알고리즘은 세 가지 계열이 널리 사용됩니다. 3072비트 또는 4096비트 RSA 키는 모든 서버와 호환됩니다. NIST P-256 곡선을 사용하는 ECDSA는 동등한 보안 수준에서 RSA보다 빠르지만, P-256의 보안 매개변수는 지속적으로 검토 대상이 되어 왔습니다. Edwards 곡선 디지털 서명 알고리즘을 기반으로 하는 Ed25519는 현대적인 권장 알고리즘입니다. 빠르고 작은 256비트 키를 사용하며, 강력한 보안 특성을 제공하고 특수한 매개변수에 대한 우려도 없습니다.
SSH의 역사: 포트 22와 Tatu Ylönen
헬싱키 공과대학교의 핀란드 연구원인 Tatu Ylönen은 1995년에 대학 네트워크에서 비밀번호 스니핑 공격이 발생하여 수백 개의 인증 정보가 노출된 후 SSH를 개발했습니다. 그는 포트 22가 telnet(23)과 ftp(21) 사이에 있었기 때문에 이 번호를 선택했습니다. SSH는 두 안전하지 않은 프로토콜을 모두 대체했습니다. Ylönen은 SSH Communications Security를 설립했으며, 이후 IETF를 통해 SSH-2를 개방형 표준으로 공개했습니다. 대표적인 무료 구현체인 OpenSSH는 1999년에 OpenBSD 프로젝트에서 개발되었습니다.
SSH 에이전트와 키 전달 보안
SSH 에이전트는 복호화된 개인 키를 메모리에 보관하는 백그라운드 프로세스로, 암호 문구를 다시 입력하지 않고도 여러 서버에 통합 로그인할 수 있도록 합니다. 에이전트 전달(-A 플래그)은 원격 서버로 에이전트 연결을 전달하여 한 단계 거쳐 내부 서버에 접근할 수 있도록 확장합니다. 그러나 에이전트 전달은 보안 위험이 있습니다. 침해된 원격 서버가 전달된 에이전트를 사용하여 다른 서버에 사용자의 자격으로 인증할 수 있기 때문입니다. 에이전트 전달 대신 ProxyJump를 사용하십시오.
SSH 보안 강화 모범 사례
안전한 SSH 구성에는 root 로그인 비활성화(PermitRootLogin no), 공개 키 인증만 사용하도록 비밀번호 인증 비활성화(PasswordAuthentication no), Ed25519 호스트 키 사용, SSH-2 프로토콜만 활성화, 유휴 세션 시간 초과 설정, AllowUsers 또는 AllowGroups를 사용한 허용 사용자 제한, 자동화된 스캔 잡음을 줄이기 위한 은닉 수단으로 기본 포트 변경이 포함됩니다. Fail2ban과 같은 도구는 실패한 시도가 반복되는 IP를 차단합니다.
SSH 인증 방법
SSH 공개 키 인증이 비밀번호 인증보다 안전하다고 여겨지는 이유는 무엇입니까?
SSH: 핵심 정리
SSH-2는 결함이 있던 SSH-1을 전송 계층, 인증 계층 및 연결 계층으로 분리하여 대체했습니다. 전송 계층은 암호화와 무결성을 협상합니다. 사용자 인증은 비밀번호, 공개 키 및 GSSAPI를 지원합니다. 호스트 키 검증에는 TOFU와 known_hosts가 사용됩니다. Ed25519가 권장되는 키 알고리즘입니다. 에이전트 전달은 보안 위험이 있으므로 대신 ProxyJump를 사용하십시오. 보안 강화에는 root 로그인과 비밀번호 인증 비활성화가 포함됩니다.
자주 묻는 질문
“SSH: 원격 액세스 보호” 강의는 무료인가요?
네 — “SSH: 원격 액세스 보호” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cryptology Academy 강의 전체를 잠금 해제할 수 있습니다. Cryptology Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“SSH: 원격 액세스 보호”에서 뭘 배우나요?
SSH 핸드셰이크와 호스트 키 인증을 살펴보고 SSH가 원격 세션을 보호하는 방식을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Cryptology Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cryptology Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cryptology Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“SSH: 원격 액세스 보호” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cryptology Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cryptology Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 안전한 프로토콜을 만드는 요소
- SSH: 원격 액세스 보호
- SFTP와 SCP: 안전한 파일 전송
- DNSSEC: DNS 응답 인증