본문 바로가기
IT

SSH 왜 필요한가?

by Cyber_ 2024. 4. 12.

왜 SSH가 필요한가?

1. SSH란?

Secure Shell Protocol, 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기이 위해 사용하는 프로토콜입니다.

대표적인 사용 예시로는 데이터 전송, 원격제어가 있다. 데이터 전송의 예로는 원격저장소인 깃헙을 들 수 있다. 소스코드를 원격 저장소인 깃헙에 푸쉬할 때 SSH를 활용해 파일을 전송하게 됩니다.

원격제어의 예시로는 AWS 명렬을 내리는 경우입니다. AWS의 인스턴스 서버에 접속하여 해당 머신에 명령을 내리기 위해서도 SSH를 통한 접속을 해야합니다.

2. FTP나 Telnet과 같은 프로토콜도 존재하지만 왜 SSH를 사용하는가?

이유는 바로 "보안"입니다. 예를 들어 다른 프로토콜을 사용하여 민간한 정보(로그인 정보 등)를 주고받는다면 정보를 직접 네트워크를 통해 넘기기 때문에 누구나 해당 정보를 열어볼 수 있어 보안에 상당히 취약합니다.

반면 SSH는 먼저 보안이 적용된 채널을 구성하여 정보를 교환하기 때문에 안전합니다.

3. SSH는 어떻게 안전해 졌는가?

SSH는 다른 컴퓨터와 통신을 하기 위해 접속을 할 때 우리가 일반적으로 사용하는 비밀번호의 입력을 통한 접속을 하지 않습니다. 기본적으로 SSH는 한 쌍의 Key를 통해 접속하려는 컴퓨터와 인증 과정을 거치게 됩니다. 한 쌍의 키는 Private Key와 Public Key로 구성되어 있습니다.

1) Public Key

  • 그대로 공개되어도 비교적 안전한 Key
  • 메시지를 전송하기 전 암호화를 진행
  • 복호화는 불가능

2) Pivate Key

  • 절대로 외부에 노출되어서는 안되는 Key
  • 본인의 컴퓨터 내부에 저장하게 되어 있음
  • 암호화된 메시지를 복호화

4. SSH 접속 과정

1) SSH 암호화 방식

  • 비대칭키 암호화:
  • 대칭키 암호화:
  • 해시:

2) 서버 인증 및 세션 키 생성

접속하려는 서버가 올바른 서버인지 검증하고, 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키를 생성하는 과정

(1) 접속 요청을 받은 서버는 클라이언트에게 자신의 공개키를 전송한다.
(2) 최초 접속이라면, 서버로부터 전달받은 공개키를 로컬에 저장할 건지 물어봐온다.
(3) 동의한다면 해당 공개키가 클라이언트 측 홈 디렉토리의 .ssh/known_hosts파일 안에 추가된다.
(4) 이후부터는 해당 서버에 접속 요청을 할 때마다 서버로부터 전달받은 공개키가 로컬에 지정되어 있는 공개키와 같은 것인지 검증하게 되며, 같다면 올바른 서버로 판단한다.
(5) 이 과정에서, 데이터 통신 시 암호화 및 복호화를 위해 사용될 대칭키( = 세션키)가 생성된다.

3) 클라이언트 인증

클라이언트가 해당 서버에 대한 올바른 접근 권한을 가지고 있는지 검증하는 과정입니다. 클라이언트 인증에는 두가지 방식이 있습니다.

  • Password 인증: 보안상 취약하여 권장되지 않는 방식
  • SSH 공개키 인증: 권장되는 인증 방식입니다. 인증 절차는 다음과 같습니다.<클라이언트 특에서 Key Pair를 생성하고 서버에 공개키를 전송하는 작업 완료>
    ->
    (1) 클라이언트는 해당 서버에 접속하기 위해 사용할 Key Pair의 ID를 서버에 전송
    (2) 서버에 해당 ID에 매칭되는 공개키가 홈 디렉토리의 .ssh/authorized_keys)파일 안에 작성되어 있는치 확인
    (3) 존재한다면, 난수 값을 생성하고 이를 해당 공개키로 암호화하여 클라이언트에 전송
    (4) 클라이언트는 전달받은 암호화된 난수 값을 해당 개인키로 복호화
    (5) 이후 복호화한 난수 값을 이용하여 MD5 해시 값을 계산하고, 이를 다시 서버에 전송
    (6) 서버도 생성했던 난수 값을 이용하여 MD5 해시 값을 계산하고, 클라이언트로부터 받은 값과 같은지 검사
    (7) 같다면, 올바른 클라이언트임이 인증되어 본격적인 데이터 통신이 가능

Reference