네트워크 스터디 3주차 - TELNET, SSH

Jiwon An·2021년 10월 27일
1

CS/네트워크

목록 보기
8/10

1. 원격 터미널 접속이 왜 필요할까?

리눅스 서버를 구축한다면 터미널이나 그래픽 유저 인터페이스(GUI) 환경을 통해 여러가지 작업을 진행할 수 있다. 그러나 대부분의 리눅스 서버는 회사에서 사내 서버로서 한 장소에 묶어두거나, 호스팅 업체 및 클라우드 호스팅 등의 다양한 구성으로 이루어졌기 때문에 관리자와 멀리 떨어져있는 곳에 서버가 위치한 경우가 많다.

서버 작업을 처리해야 할 일이 있을 때 마다 매번 해당 서버가 위치한 곳으로 이동할 수는 없고, 이동해서 관리하자니 관리해야 할 서버가 점차 많아지게 되면 각각의 서버로 이동하여 일일히 모니터를 연결하여 작업을 할 수는 없는 노릇이다.

이에 따라 원격 접속은 중요하고 필수적인 작업이 되었다.

다양한 원격 접속 프로그램을 사용해 원격지에 있는 서버에 굳이 찾아가지 않고 해당 서버의 주소(IP 등)만 알고 있다면 다른 PC를 통해 바로 접속할 수 있다. 윈도우로 말하자면 원격 데스크톱 연결(RDP)을 예로 들 수 있다.

리눅스도 마찬가지다. 리눅스에서는 일반적으로 RDP 프로토콜을 지원하지 않아 그래픽 데스크톱 환경에서 띄우기 위해 VNC나 XRDP, XDMCP와 같은 프로토콜을 사용해야 하며 연결이 가능해지도록 일련의 설정을 해주어야 한다. 그러나 특수한 경우가 아니라면 일반적인 터미널 연결을 위해서까지 굳이 그래픽 데스크톱 환경을 띄워야 할 필요는 없을 것이다.

이러한 원격 접속을 이용해 터미널 환경을 사용할 수 있도록 고안된 프로토콜이 Rlogin, Telnet, 그리고 최근들어 가장 많이 사용되는 SSH이다.

2. 터미널과 터미널 애뮬레이터


우리가 흔히 접하는 프로그램인 Xshell, PuTTY, iTerm이나 SecureCRT는 윈도우에서 원격 리눅스 서버로 터미널 접속 프로토콜을 사용하여 연결할 수 있도록 도와주는 터미널 에뮬레이터 클라이언트다. 리눅스 내에서 실행되는 터미널 또한 마찬가지로 터미널 에뮬레이터로 불린다. 터미널 에뮬레이터(Terminal Emulator)는 말 그대로 실존하는 것이 아닌 가상으로 구현된 복제품이다. 기존의 터미널은 포괄적으로 볼 수 있는 컴퓨터와 사용자 간의 소통을 위한 인터페이스에 가깝다.

Telnet과 SSH와 같은 프로토콜은 원격지로 연결을 가능하도록 하는 네트워크 접속 도구이다. 리눅스 시스템 자체에 있는 터미널 클라이언트는 대개 원격 접속이 아니기 때문에 SSH 프로토콜을 사용하지 않는다.

3. 텔넷(TELNET)

인터넷이나 로컬 영역 네트워크 연결에 쓰이는 네트워크 프로토콜이다. 텔넷이라는 용어는 프로토콜의 클라이언트 일부 기능이 추가된 소프트웨어를 일컫는다. 텔넷 클라이언트는 대부분의 유닉스 시스템에서 여러 해 동안 사용할 수 있으며, 실질상 모든 플랫폼에서 사용할 수 있다. TCP/IP 스택을 갖춘 대부분의 네트워크 장비와 운영 체제들은 원격 구성(윈도 NT 기반)을 위해 몇 가지 종류의 텔넷 서비스 서버를 지원한다.

4. 시큐어 셸(Secure Shell, SSH)

네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공한다. 기본적으로 22번 포트를 사용한다.
SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보인다.

쉽게 설명하자면, 이름에서도 알 수 있듯이 보안을 중요시한 프로토콜이다. 기존에는 Telnet이나 Rlogin을 사용했지만 최근에는 대부분 SSH 프로토콜을 사용한다.

우리가 흔히 알고있는 리눅스 명령어는 SSH 명령어라고 부르기 보다는 sh, bash 등의 셸 명령어라고 보시는 것이 맞다. 대부분은 sh 및 bash라는 명령어 체계를 사용할 것이다.

따라서 Telnet으로 접속하던 SSH로 접속하던 사용하는 환경이 크게 달라지지 않는다. 서버가 동일하고 해당 서버에서 사용하는 셸 명령어가 동일하다는 조건 하에 말이다. 그런데 Telnet 프로토콜을 놔두고 굳이 SSH 프로토콜을 개발했으며, Telnet을 사용하지 않는 분위기가 조성되었을까?

이유는 Telnet은 보안적으로 매우 치명적인 결함이 있기 때문이다.
먼저 SSH 프로토콜을 사용했을 때 일반 문자열이 출력되면 아래 부분과 같이 식별할 수 없는 내용으로 패킷이 보내진다. 따라서 암호화된 통신을 가능하게하여 누군가 정보를 탈취해도 쉽게 해석하지 못하도록 보안성을 향상시킬 수 있다.

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

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

5. TELNET과 SSH의 공통점과 차이점

공통점

  • 원격지 PC를 액세스하기 위한 용도로 쓰인다는 것이다.

차이점

  • 텔넷은 TCP의 23번 포트를 사용하고 SSH는 22번 포트를 사용한다.
  • SSH는 텔넷에 보안 기능을 넣은 것이다.
  • 텔넷은 내부 네트워크에서 사용하고 외부 네트워크에서 사용할 때는 SSH를 사용하는 것이 좋다.
  • 텔넷은 본인 인증을 하지 않는다. 그래서 통신 중간에 통신을 가로챌 수 있다.
  • SSH는 보안을 위한 오버헤드가 있다.
  • 현재 텔넷은 디버깅이나 테스트 용도에만 사용되고 대부분 SSH를 사용한다.
  • 텔넷은 바이트 스트림 형식으로 주고 받지만 ssh는 암호화하여 처리한다.
    즉, 암호를 포함한 모든 데이터를 그대로 전송한다.
    중간에 누가 데이터를 채간다 하더라도 텔넷과는 달리 ssh는 데이터의 안정성을 확보할 수 있다.
  • ssh은 ssh1과 ssh2로 두가지 프로토콜이 있다.
    ssh1은 RSA 암호화를 사용하지만, ssh2는 RSA외에도 다양한 키교환 방법들을 지원한다.
    ssh1은 공개되었지만, ssh2는 상업적으로 사용시에 제한이 따른다.

주고받는 데이터를 암호화하기 때문에 ssh이 느릴수도 있겠다는 생각이 들지도 모르겠지만 ssh는 패킷을 주고 받는 과정에서 암호화한 데이터를 압축하여 주고 받기 때문에 서버에 부하가 생길망정 트래픽은 크게 늘어나지 않는다.
때문에 정보가 노출될 수 있는 텔넷보다는 정보의 안정성을 어느정도 책임질 수 있는 (게다가 속도차이도 나지 않기 떄문에) ssh을 많이 사용한다.

참고

https://blog.naver.com/gigar/60118173765
https://jootc.com/p/201808031460
https://article2.tistory.com/564

profile
아무것도 모르는 백엔드 3년차 개발자입니다 :)

0개의 댓글