SSH (Secure SHell) 란? 쉽게 이해해보자.

반응형

출처 : 하나몬

"Secure Shell Protocol" 

즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은

Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜입니다.

 

SSH는 개발을 하다보면 한번씩은 꼭 접해봤을 겁니다.

대표적인 예로는 Github을 사용할 때로, Github에 코드를 푸쉬하거나 Github 레포지토리를 clone할 때 사용하기도 합니다.

 

SSH를 사용하면 네트워크 상의 다른 컴퓨터에 원격 로그인하여 ( 예를 들어, AWS EC2 원격접속 ), 원격 시스템에서 명령을 실행하고, 다른 시스템으로 파일을 복사 ( SCP 명령어 ) 할 수 있습니다.

  • 데이터 전송
  • 원격 접속
  • 원격 제어

 

SSH를 사용하는 이유는, FTP나 Telnet과 같은 다른 컴퓨터와 통신을 위해 사용되는 프로토콜을 사용한다면,  

민감한 정보(예를 들어 로그인 정보)를 주고받는다면 정보를 직접 네트워크를 통해 넘기기 때문에 누구나 해당 정보를 열어볼 수 있어 보안에 상당히 취약합니다.

하지만 SSH를 사용하면 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보다 보안적인 면에서 뛰어나기 때문에 "보안"의 목적을 위해 사용합니다.


SSH는 어떤식으로 동작하는가 ?

SSH 키는 공개키(public key)비밀키(private key)로 이루어지는데 이 두개의 키를 이해하는 것이 SSH Key를 이해하는데 핵심입니다.

모른다면 아래 포스팅을 통해 알아봅시다.

 

[암호화] 대칭키(비공개키)와 비대칭키(공개키) 란 ?

저번 포스팅에서 "암호화"에 대해 알아보았습니다. 암호화에는 단방향 암호화, 양방향 암호화 두 종류가 있었는데요. 이번 포스팅에선  양방향 암호화인 대칭키(비공개키)와 비대칭키(공개키)

hstory0208.tistory.com

 

키를 생성하면 공개키와 비공개키가 만들어지는데,

비밀키(private key)로컬(클라이언트)에 위치해야 하고, 공개키(public key)리모트(원격)에 위치해야 합니다.

(이 그림에서 로컬은 SSH Client, 원격은 SSH Server가 설치된 컴퓨터를 의미)

  1.  SSH Client가 SSH 접속을 시도하면 SSH Server는 서로의 키가 일치하는지 확인하기 위해 서버의 공개키로 암호화된 메시지를 보냅니다.
  2. SSH Client는 가지고 있는 비밀키를 이용해, 공개키로 암호화된 메시지를 복호화하여 SSH Server에 보냅니다.
  3. SSH Server는 SSH Client가 가지고 있는 비밀키가 자신의 공개키와 한 쌍인 것을 확인합니다.
     ( 비밀키와 공개키는 한 쌍이므로 한 쌍이 아닌 다른 키일 경우 복호화할 수 없습니다. )
  4. 서로 한쌍의 키라는 것이 인증되면 클라이언트와 서버는 통신을 위한 대칭 키를 생성합니다. 
    이 키는 세션 동안 서버와 클라이언트 간의 모든 통신을 암호화하는 데 사용됩니다.
대칭 키의 생성과 교환 과정에서 키가 탈취될 위험이 없을까?

이 문제를 해결하기 위해 대칭 키의 생성과 교환 디피-헬먼 키 교환 알고리즘 (Diffie-Hellman Key Exchange) 알고리즘이 사용됩니다.

이 방식을 통해 키 탈취 우려가 있는 대칭키를 양쪽에서 안전하게 생성할 수 있으며, 이후 통신은 이 대칭 키를 사용하여 암호화됩니다.

 

비대칭 키 방식은 안전한 인증을 제공하지만 상대적으로 연산 비용이 높고

대칭 키 방식은 탈취의 우려가 있지만 빠르고 효율적인 데이터 암호화를 가능하게 합니다.

즉, SSH는 인증 과정에서는 비대칭 키를 사용해 안전한 인증이 가능케 하고,

인증이 완료된 후 세션 통신에는 대칭 키를 사용해 빠르고 효율적인 통신이 가능하도록 합니다.