Back End/서버 지식

SSH의 개념과 통신 과정

Im_Hayden 2024. 9. 21. 15:59

01. SSH(Secure Shell)란

SSH: 네트워크 상에서 다른 컴퓨터를 통해 PC를 원격으로 조작할 수 있게 해주는 프로토콜

  • Shell을 사용하여 원격으로 외부 PC를 조작한다.
  • 이때 PC를 조작하는 명령들은 대칭키와 비대칭키를 활용하여 암호화 된다.
    • 때문에 기존의 Telnet 프로토콜보다 보안상 뛰어나다.

02. SSH 통신 사용 사례 및 예시

  • SSH 통신은 주로 서버 PC를 원격으로 조작하기 위해 사용된다.
    • 운영 환경에서 서버 PC는 별도의 서버실에 존재하거나, 또는 클라우드 플랫폼을 사용하여 구축된다.
    • 이때 서버 PC를 조작하기 위해 매번 서버실에 출입하기에는 번거롭다.
    • 이런 경우 SSH 프로토콜을 사용하여 개인 PC에서 원격으로 서버 PC를 조작할 수 있다.
  • PuTTY, Xshell 등의 클라이언트 등을 사용해 쉽게 이용할 수 있다.

03. SSH 통신 과정

SSH 통신 과정을 이해하기 위해서는 우선 대칭키, 비대칭키 의 개념을 이해하고 있어야 한다.
이에 관해 이전에 작성한 포스팅을 보고 오면 아래 내용의 이해가 수월할 듯 하다.

  1. 클라이언트 환경에서 서버의 PC를 조작하고자 한다.
  2. 초기 연결 설정
    • 클라이언트는 서버의 공개키를 저장해둔다.
  3. 세션키 생성 및 교환
    • 세션키: 이후 클라이언트가 서버에 전송할 메세지를 암호화 하기 위한 대칭키
    • 클라이언트는 임의의 세션키를 생성
    • 클라이언트는 서버의 공개키를 사용하여 세션키를 암호화
    • 서버는 전달받은 암호문을 자신의 개인키로 복호화
    • 이렇게 전달받은 세션키는 이후 통신에 사용됨
  4. 사용자 인증 
    • 서버가 클라이언트의 권한 등을 식별하는 과정
    • 비대칭키, 비밀번호 등을 통해 클라이언트를 식별한다. 위 그림에서는 비대칭키를 통한 방법으로 설명한다.
    1. 클라이언트는 비대칭키 쌍을 가지고 있으며, 해당 공개키는 서버에 이미 등록되어있음
      • 해당 비대칭키는 연결할 때 마다, 매번 생성하는 것이 아니고 최초 한번한 생성
      • 최초에 생성된 공개키는 서버에 등록, 개인키는 클라이언트에 저장시켜두어야함
    2. 서버는 클라이언트의 인증을 위해 임의의 데이터(챌린지 데이터)를 클라이언트에게 전달
    3. 클라이언트는 자신이 소유한 개인키를 사용하여 챌린지 데이터를 암호화하여 서버에 전달
    4. 서버는 전달받은 암호문을 서버에 미리 저장된 클라이언트의 개인키를 통해 복호화
    5. 이렇게 복호화된 데이터와 원본 챌린지 데이터를 비교하여, 클라이언트를 식별
      • 만약 개인키를 소유하지 않은 외부 PC에서, 임의의 키로 암호화한 경우, 서버에서 제대로 복호화 되지 않음
  5. 암호화된 통신
    • 사용자 인증이 완료되었으면, 2번 과정에서 전달받은 세션키를 사용하여 암호화된 데이터를 주고 받음