본문 바로가기
OS/Unix

원격 서버 접속하기(1) - telnet/ssh

by Dev Lighthouse 2023. 11. 20.
320x100
320x100

입사를 해서 회사 일을 해보면, 이런 단어들을 들어볼 수 있을 것이다

로컬 서버, 개발 서버, 스테이징 서버, 배포 서버, 테스트 서버 등등

 

큰 기업에 가면 xx서버에 접속해서, 변화점이 있는 파일들을 수집하고, 자동으로 배포하는 등등..

이런 과정들이 원클릭으로 구성되어 있을 것이다

 

그리고 회사에서는 이런 서버에 접속하기 위해 특정 IP만을 허용하는 허용리스트(AllowList)를 만들어서 VPN 프로그램을 사용하는 등의 방법으로 접속을 허용/제한한다 (UFW, IPTables, Firewalld, ZeroTier, WireGuard, pfSense 사용)

 

이 글에서는 방화벽에 대한 내용보다는 원격 서버에 접속하는 방법, 내가 사용하는 방법에 대해서 포스팅해보려고 한다

 

Telnet

로컬 네트워크에서 리모트 컴퓨터에 접속해서 사용할 수 있도록 하는 프로토콜

 

- 뜻: tel(통신) + net(네트워크)

- 기본 포트: 23

- 동작 순서/원리

  1. 클라이언트-서버 모델: 사용자는 Telnet 클라이언트를 사용하여 Telnet 서버에 접속한다
  2. 연결 및 인증: 사용자가 Telnet 클라이언트를 통해 서버의 IP주소와 23번 포트로 연결을 시도한다. 연결이 성공하면 서버에 접속하기 위한 자격증명(ip/pw)를 입력해야 된다
  3. 세션 생성 및 명령 실행: 인증이 성공하면, 사용자는 원격 서버의 콘솔에 액세스할 수 있게 된다. 이때부터 사용자는 로컬 터미널에서 명령을 입력하는 것처럼 서버에서 명령을 실행할 수 있다.
  4. 데이터 전송: 사용자의 입력과 서버의 응답은 네트워크를 통해 평문으로 전송된다. 이는 Telnet의 가장 큰 단점 중 하나로, 데이터가 암호화되지 않기 때문에 보안에 취약하다.
  5. 세션 종료: 사용자가 작업을 마치면, Telnet 세션을 종료할 수 있다. 일반적으로 로그아웃 명령을 통해 이루어진다

- 특징 및 장/단점

  1. 텍스트 기반 인터페이스(TUI): 사용자는 텍스트 명령을 통해 원격 서버에 접속하고 제어할 수 있다
  2. 단순성과 호환성: Telnet 프로토콜은 매우 단순하며 다양한 운영 체제와 호환이 가능하다
  3. 보안 취약성: Telnet은 데이터를 암호화하지 않는다. 따라서, 전송되는 모든 데이터(로그인 자격증명 포함)는 네트워크를 통해 평문으로 전송되며, 중간자 공격에 취약할 수 있다
  4. 네트워크 진단 및 관리 도구로서의 사용: 보안상의 문제로 대부분의 관리 작업에서는 사용되지 않지만, 네트워크 진단과 같은 특정 목적으로는 여전히 사용됨

 

- 예제

telnet 명령어로 어떤 원격지의 특정 포트가 열려있는지 확인할 수 있다!

기본적으로 macOS에는 openSSH가 설치되어 있고, telnet은 설치되지 않았기 때문에 설치가 필요하다

homebrew 설치가 안되어있다면 아래의 링크에서 설치하자

https://code-boki.tistory.com/116

brew install telnet

 

특정 주소의 특정 포트가 열려있는지 테스트

telnet www.google.com 80 // http 성공 기대
telnet www.google.com 85 // ? 실패 기대
telnet www.google.com 443 // https 성공 기대

80번 포트 well known port로 우리가 흔히 접속하는 http:// 이다

443포트는 같은 well known port로 우리가 흔히 접속하는 https:// 를 나타낸다

 

접속에 성공하면 Connected to www.google.com이라고 나온다

접속에 실패하면 Operation timed out라는 메시지를 볼 수 있다

 

접속에 성공하고 나가려면 control + [ 키를 누르고 quit 명령어를 입력하면 된다

특정 주소의 특정 포트가 열려있는지 테스트2

telnet이 아닌 nc 명령어로 테스트로도 할 수 있다!

nc -zv www.google.com 80
nc -zv www.google.com 443
nc -zv www.google.com 85

 

SSH

- 뜻: Secure SHell(보안 셸)

- 기본 포트: 22, 웹(443)

- 동작 순서/원리

  1. 클라이언트-서버 모델: 사용자는 SSH 클라이언트를 사용하여 SSH 서버에 접속한다
  2. 암호화된 연결 설정: 연결이 시작되면, 클라이언트와 서버는 암호화된 채널을 설정하기 위한 핸드셰이크 과정을 수행한다. 이 과정에서 서버는 클라이언트에게 자신의 공개 키를 전송한다
  3. 인증: 클라이언트는 서버에 로그인하기 위해 사용자 이름을 제공함. 인증은 비밀번호 또는 키 기반 방식을 사용할 수 있다. 키 기반 인증의 경우, 클라이언트는 자신의 개인 키를 사용하여 인증 정보를 암호화하여 서버에 전송한다
  4. 세션 생성: 인증이 성공하면, SSH 클라이언트와 서버 간에 암호화된 세션이 생성된다. 사용자는 이 세션을 통해 서버에 명령을 전송하고, 서버는 응답을 암호화하여 클라이언트로 전송한다
  5. 데이터 암호화 전송: SSH 세션 동안 전송되는 모든 데이터는 암호화된다. 이는 네트워크를 통한 데이터 전송 과정에서 정보가 노출되거나 변조되는 것을 방지한다.
  6. 세션 종료: 작업이 완료되면, 사용자 또는 서버는 SSH 세션을 종료할 수 있다.

- 특징 및 장/단점

  1. 암호화된 데이터 전송: SSH는 데이터를 암호화하여 전송. 이는 사용자의 자격 증명, 명령, 파일 전송 등 모든 통신이 네트워크를 통해 안전하게 이루어질 수 있음을 의미한다.
  2. 원격 명령 실행: SSH를 통해 사용자는 원격 서버에 텍스트 기반 명령을 실행할 수 있다. 이를 통해 서버 관리, 프로그램 실행 등 다양한 작업을 수행할 수 있다.
  3. 포트 포워딩/터널링 기능: SSH는 안전한 터널링 기능을 제공, 다른 프로토콜(예: HTTP, FTP)의 트래픽을 SSH 연결을 통해 전송할 수 있다.
  4. 키 기반 인증: SSH는 비밀번호 기반 인증 뿐만 아니라, 보다 안전한 키 기반 인증 방식을 지원한다. 사용자는 공개 키와 개인 키를 생성하여 보다 안전하게 서버에 접속할 수 있다.
  5. 다양한 운영 체제 지원: SSH 클라이언트와 서버는 Linux, macOS, Windows 등 대부분의 운영 체제에서 사용할 수 있다

- 관련 프로토콜

SSH, SCP, SFTP, SSHFS, SSH Port Forwarding(Tunneling), SSH Key Management System

 

다음 포스팅에서 SSH에 대해 실습해본다

 

 

출처

https://ko.wikipedia.org/wiki/%ED%85%94%EB%84%B7

https://www.ssh.com/academy/ssh/command

https://library.gabia.com/contents/infrahosting/9002/

댓글