SSH와 Telnet

서정범·2023년 5월 1일
1

네트워크

목록 보기
23/26
post-thumbnail

SSH(Secure SHell, SSH)Telnet네트워크 프로토콜입니다.

Telnet이 먼저 사용되다가 Telnet이 가지고 있는 단점 때문에 현재는 SSH를 사용하는 추세입니다.

먼저 Telnet에 대해서 정리를 하고 SSH에 대해서 정리를 하도록 하겠습니다.

Telnet

텔넷(TELNET)은 인터넷이나 로컬 영역 네트워크 연결에 쓰이는 네트워크 프로토콜입니다.

Telnet은 원격으로 컴퓨터 시스템에 로그인하고, 해당 컴퓨터의 자원을 사용하거나 관리할 수 있는 네트워크 프로토콜입니다.

Telnet은 1969년에 개발되었으며, 초기 인터넷의 일부였습니다. Telnet은 "텔레넷(Telecommunication Network)"의 줄임말로, 클라이언트-서버 모델을 사용합니다.

Telnet 클라이언트는 사용자의 컴퓨터에 실행되며, 원격 서버에 접속하여 커맨드를 전송하고 결과를 받아옵니다. 이를 통해 원격 컴퓨터에서 마치 로컬 컴퓨터에서 작업하는 것처럼 명령어를 실행할 수 있습니다.

  • TCP/IP 기반의 프로토콜
  • 원격 터미널 접속 서비스
  • TCP 23번 포트(Default)
  • 보안성을 위해 사용자가 포트 변경할 수 있다.

하지만 Telnet은 몇 가지 중요한 단점이 있습니다:

  1. 보안: Telnet은 데이터를 암호화하지 않고 평문(바이트 스트림)으로 전송합니다. 이는 네트워크 상에서 데이터가 노출되거나 가로채질 위험이 있습니다. 또한 사용자 인증 정보(예: 비밀번호)도 평문으로 전송되어 보안 위험이 큽니다.
  2. 기능: Telnet은 원격 작업을 위한 기본적인 기능만 제공하며, 고급 기능이나 파일 전송 등의 다양한 기능을 제공하지 않습니다.

이러한 이유로, 현재는 대부분의 경우 SSH(Secure Shell)와 같은 보안이 강화된 프로콜이 Telnet의 대안으로 사용되고 있습니다.

SSH

시큐어 셀(Secure Shell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킵니다.

즉, SSH는 원격 컴퓨터와 안전하게 통신하고 관리하기 위한 암호화된 네트워크 프로토콜입니다.

우리는 사실 이것을 사용하는 서비스를 많이 봐왔을 것입니다.

흔히, NBP나 AWS같은 클라우드 서비스에서 서버를 생성하면 '인증키'나 '키 페어'라는 것을 생성하는 것을 확인할 수 있습니다.

여기서 깃허브에서 사용하는 'Token'이 개인키일 줄 알았지만, 조금 다른 개념이라고 합니다.

토큰은 사용자의 권한을 나타내는 고유한 문자열로, 사용자 인증 및 권한 부여를 위해 사용됩니다.

Github에서 토큰은 사용자의 비밀번호 대신 API 요청에 사용되어, 인증 및 권한을 확인합니다.

토큰은 다음과 같은 목적으로 사용됩니다.

1. 인증: 토큰은 사용자 인증 정보를 안전하게 전달하는 방법으로 사용됩니다. 비밀번호 대신 토큰을 사용함으로써, 비밀번호가 노출될 위험을 줄일 수 있습니다.
2. 권한 부여: 토큰은 사용자에게 특정 권한을 부여하는 데 사용됩니다. 예를 들어, 특정 레포지토리에 대한 읽기, 쓰기 또는 권리 권한을 토큰을 통해 설정할 수 있습니다.
3. 접근 제어: 토큰을 사용하면 사용자의 접근 범위를 제한할 수 있습니다. 예를 들어, 특정 레포지토리에 대한 접근만 허용하거나, 특정 작업에 대한 권한만 부여할 수 있습니다.

토큰은 개인키와 다르게, 사용자의 인증 및 권한 부여를 위한 목적으로만 사용되며, 암호화나 디지털 서명에 사용되지는 않습니다. 하지만, 토큰은 매우 중요한 정보이기 때문에 개인키처럼 안전하게 보관해야 합니다. 누군가가 사용자의 토큰에 액세스할 경우, 해당 사용자의 권한 범위 내에서 Github에서 작업을 수행할 수 있게 됩니다.

우리가 원격으로 서버에 접속하기 위해서는 외부의 보안 위협으로부터 보호해주는 기술이 필요합니다.

그때 사용되는 것이 "공개키(Public Key)""비공개키(Private Key)"입니다.

왜 이 방식을 사용하는 것일까요?

key 교환 방식

만약, 우리가 비밀번호를 사용해서 원격 서버에 접속을 한다고 생각해 봅시다.

이 방식을 사용하는 것이 텔넷(Telnet)에서 사용하는 방식입니다.

암호화를 제공하지 않기 때문에 보안상 취약합니다. 실제로 WireShark 같은 패킷 분석 프로그램을 이용하면 누구나 쉽게 원격 접속 과정에서 옮겨지는 비밀번호나 파일 내용등의 데이터를 탈취할 수 있습니다. 때문에 이를 암호화하는 SSH 기술이 등장했고, 현재 원격 접속 보안을 위한 필수적인 요소로 자리잡고 있습니다. 그리고 클라우드 서비스에서 제공하는 서버는 기본적으로 원격 접속을 해서 접근하고 사용합니다. 그래서 NBP나 AWS와 같은 CSP(Cloud Service Provider)에서 서버 생성시 필수적으로 SSH 보안 과정을 거치는 것입니다.

특징을 좀 정리해자면 다음과 같습니다.

  • Public Key and Private Key:
    • SSH는 다른 컴퓨터와 통신할 때 일반적으로 사용하는 비밀번호 입력을 통한 접속을 하지 않습니다.
    • 기본적으로 SSH는 한 쌍의 Key를 통해 접속하려는 컴퓨터와 인증 과정을 거칩니다.
    • 공개키와 개인키는 한 쌍을 이룹니다. 즉, 1대 1 매핑 관계를 가집니다.
    • 이 키들은 매우 복잡한 수학적인 관계를 맺고 있습니다.
  • Public Key:
    • 단어 뜻 그대로 공개되어도 비교적 안전한 Key입니다.
    • 이 키를 통해 메시지를 전송하기 전 암호화를 합니다.
    • 암호화는 가능하지만 복호화는 불가능합니다.
    • 보통 .pub 파일 형식을 띄고 있습니다.
  • Private Key:
    • 절대로 외부에 노출되어서는 안되는 Key입니다.
    • 로컬 컴퓨터 내부에 저장하게 되어 있습니다.
    • 암호화된 메시지를 복호화 할 수 있습니다.
    • 보통 .pem 파일 형식을 띄고 있습니다.

결국 공개키를 사용하는 이유는 다음과 같습니다.

  1. 키 교환 문제 해결: 대칭키 암호화에서는 통신하는 양측이 동일한 키를 사용하여 데이터를 암호화하고 복호화해야 합니다. 따라서 안전하게 키를 교환하는 방법이 필요합니다. 공개키 암호화 방식에서는 이런한 문제를 해결할 수 있습니다. 공개키는 공개적으로 공유할 수 있으며 개인키만 안전하게 보관하면 됩니다.
  2. 인증: 공개키 암호화 방식은 사용자 인증에도 사용됩니다. SSH 연결 시 사용자는 개인키를 사용해 자신의 신원할 수 있으며, 서버는 등록된 공개키를 이용해 인증을 검증할 수 있습니다. 이러한 방식은 사용자 이름과 비밀번호를 사용하는 것보다 훨씬 안전합니다.
  3. 암호화: SSH 연결에서 공개키 암호화 방식은 대칭키를 안전하게 교환하는 데 사용됩니다. 일단 대칭키가 교환되면, 이후의 통신은 대칭키 암호화를 사용하여 빠르고 효율적으로 데이터를 암호화하고 복호화합니다.

공개키를 사용함으로써 위의 이유로 안전하고 효율적인 인증 및 암호화를 제공할 수 있습니다.

동작 순서

동작 순서를 간단하게 정리해 보자면 다음과 같습니다.

  1. 먼저, 서버 컴퓨터에서 SSH 서버를 설정하고 실행해야 합니다. 대부분의 리눅스 배포판에서는 OpenSSH가 기본적으로 포함되어 있습니다. 윈도우의 경우, OpenSSH를 설치해야 할 수도 있습니다.
  2. 서버 컴퓨터에서 원격 사용자 계정을 설정해야 합니다. 이 계정은 다른 사람이 접속할 때 사용할 것입니다.
  3. 다른 사람의 공개키를 서버 컴퓨터의 원격 사용자 계정의 'authorized_keys'파일에 추가해야 합니다. 이렇게 하면, 해당 사용자는 개인키를 사용하여 해당 계정으로 SSH 접속이 가능해집니다.

Reference

profile
개발정리블로그

0개의 댓글