SSH란?

황인호·2022년 11월 12일
0

SSH란 무엇인가??

개발자라고한다면 서버를 원격으로 접속해서 작업해야하는일이 종종 아니 많이 생긴다.

이에 따라 원격 접속은 중요하고 개발자에게 필수적인 작업이 되었습니다.

다양한 원격 접속 프로그램을 사용하여 원격지에 있는 서버에 굳이 찾아가지 않고 해당 서버의 주소(IP 등)만 알고 있다면 다른 PC를 통해 바로 접속할 수 있습니다.

이러한 원격 접속을 이용하여 터미널 환경을 사용할 수 있도록 고안된 프로토콜이 Rlogin, Telnet, SSH 입니다.

SSH란?

데이터 전송과 원격 제어를 하는 프로토콜은 Telnet과 SSH가 있는데 SSH를 사용하는 이유는 무엇일까??

둘다 같은 역할을 하지만 Telnet은 보안적으로 매우 치명적인 결함이 있기 때문에 SSH를 사용한다.

먼저 Telnet 프로토콜의 치명적인 결함은 일반 문자열이 출력될때 별도의 암호화가 되지않는 다는 점이다.
이로 인해 노출되어서는 안되는 데이터(패스워드 등등)로 추측되는 문자열이 입력 또는 출력될 때 마다 탈취자가 파악할 수 있는 치명적인 문제가 발생한다.

반면에 SSH 프로토콜을 사용했을 때는 일반 문자열이 출력되면 식별할 수 없는 내용으로 패킷이 보내집니다.
따라서 암호화된 통신을 가능하게하여 누군가 정보를 탈취하여도 쉽게 해석하지 못하도록 보안성을 향상시킬 수 있습니다.

그렇기 때문에 오늘날 최신 리눅스에서는 일반적으로 SSH 데몬이 구동되고 Telnet은 패키지조차 설치되지 않는다.
그래서 SSH 프로토콜을 사용하며 특별한 경우가 아니면 Telnet 프로토콜 사용을 지양해야한다.

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

대표적인 사용 예시

  • 데이터 전송
  • 원격 제어

SSH를 사용하는 이유?

SSH 는 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보다 보안적인 면에서 훨씬 뛰어납니다.
그렇다면 SSH는 어떤 방식으로 서로 다른 컴퓨터가 안전하게 통신하게 하는것일까??

Private Key and Pubilc Key

SSH 는 다른 컴퓨터와 통신을 하기 위해 접속을 할 때 우리가 일반적으로 사용하는 일반적으로 사용하는 비밀번호의 입력을 통한 접속을 하지 않는다.
SSH는 한 쌍의 Key를 통해 접속하려는 컴퓨터와 인증 과정을 거치게 된다.
이 한쌍의 Key는 다음과 같다.

  • Private Key
  • Public Key

Public Key는 공개되어도 안전한 Key 입니다.

  • Public Key를 통해 먼저 메시지를 전송하기 전 암호화를 한다.
  • Public Key는 암호화는 가능하지만 복호화는 불가능하다.
  • 복호화(decryption)는 암호화된 데이터를 암호화되기 전의 형태로 바꾸는 처리를 말한다.

Private Key 는 절대로 외부에 노출이 되어서는 안되는 Key 로 본인의 컴퓨터 내부에 저장하게되어있다.
이 Private Key 를 통해 암호화된 메시지를 복호화 할 수 있습니다.

이렇게 Public Key 와 Private Key 는 서로 매우 복잡한 수학적인 관계를 맺고 있습니다.

이러한 Private Key 와 Public Key를 통해 다른 컴퓨터와 통신을 하기 위한 방법
1. 먼저 Public Key를 통신하고자하는 컴퓨터에 복사하여 저장합니다.
2. 복사되어 저장된 Public Key 와 쌍을 이루는 Private Key 와 비교를 하여 서로 한 상의 Key 인지 아닌지를 검사한다.

이렇게 서로 관계를 맺고 있는 Key 라는 것이 증명이 되면 비로소 두 컴퓨터 사이에 암호화된 채널이 형성이 되어 Key를 활용해 메시지를 암호화하고 복호화하며 데이터를 주고 받을 수 있게 됩니다.

  • 원격 접속 시도
    $ ssh 계정명@접속IP
    (처음 접속 시도할때 접속할지 물어볼때 yes하면 됨)

  • 포트번호와 함께 접속 시도
    $ ssh -p 포트번호 계정명@접속아이피

profile
성장중인 백엔드 개발자!!

0개의 댓글