JooTC
linux_terminal

SSH란 무엇이고 왜 사용하나요? Telnet과의 차이점은요?

linux_terminal

리눅스를 처음 접하시는 분들은 터미널과 TelnetSSH와 같은 프로토콜 등에 대한 용어와 쓰임새에 대해서 많이들 혼동하시곤 합니다. ‘리눅스 환경에서 터미널을 열었으니 SSH 접속이 된 것이다’ 라고 생각할 순 있으나, 이는 터미널 환경에서 명령어 셸을 통한 인터페이스가 제공된 것일 뿐이며 SSH 프로토콜을 사용한 것은 아닙니다.

 

원격 터미널 접속은 왜 필요할까요?


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

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

 

linux_network_connection

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

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

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

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

 

터미널과 터미널 에뮬레이터


xshell ssh connection example

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

 

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

 

SSH란 무엇인가요?


SSH(Secure Shell)는 이름에서도 알 수 있듯이 보안을 중요시한 프로토콜입니다. 기존에는 Telnet이나 Rlogin을 사용하였지만 최근에는 대부분 SSH 프로토콜을 사용합니다.

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

 

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

이유는 Telnet은 보안적으로 매우 치명적인 결함이 있기 때문입니다. WireShark 라는 패킷 분석 프로그램을 사용하여 그 이유를 알려드리겠습니다.

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

wireshark_ssh_packet_test

 

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

wireshark_telnet_packet_test

 

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

 

어떻게 SSH를 사용하여 원격 서버에 접속할 수 있나요?


아래 포스트를 참고하셔서 SSH 프로토콜을 사용하여 원격에서 접속할 수 있도록 환경을 구성해볼 수 있습니다.

구독
알림
guest

5 Comments
Inline Feedbacks
모든 댓글 보기
nugurejeil
nugurejeil
4 년 전에

좋은 내용 잘봤습니다.

걱정하지않는자
걱정하지않는자
3 년 전에

좋은 정보 감사합니다.

공부하자
공부하자
2 년 전에

자세하게 적혀있어 도움이 많이 되었습니다. 감사합니다.

5
0
이 포스트에 대한 의견을 남겨주세요!x