보안

SSH와 Telnet 정리 :: 원격 접속 프로토콜 비교와 실습 (평문 노출, 키 인증, 포트 포워딩)

gamjadori 2026. 9. 9. 07:10
728x90

SSH와 Telnet 정리 :: 원격 접속 프로토콜 비교와 실습 (평문 노출, 키 인증, 포트 포워딩)



SSH와 Telnet: 원격으로 다른 컴퓨터/서버에 접속해서 명령어를 실행하기 위한 프로토콜
차이는 암호화 여부

* Telnet: 가장 오래된 원격 접속 프로토콜 중 하나로, 포트는 23사용
통신 내용이 전부 평문으로 전송 (아이디, 비밀번호, 명령어 전부 노출)
패킷 캡처하면 로그인 정보까지 노출되어 보안 문제로 사용하지 않음

* SSH (Secure Shell): Telnet을 대체하기 위해 나온 프로토콜로, 22번 포트 사용
모든 통신이 암호화 (공개키/개인키 기반 인증 및 대칭키로 세션 암호화)
로그인 방식
1. 비밀번호 인증: 아이디+비밀번호 입력
2. 공개키 인증: 미리 등록한 공개키로 인증해 비밀번호 없이 접속 가능 (안전성)


원격 명령, 파일 전송(SCP, SFTP), 포트 포워딩(터널링) 기능 지원

*Telnet vs SSH


접속
telnet localhost



실습:: Wireshark(tcpdump)로 Telnet 패킷 스니핑


캡처
sudo tcpdump -i lo port 23 -w telnet_capture.pcap


캡처 중에 다른 터미널에서 telnet localhost 접속해서 로그인 후, telnet_capture.pcap을 Wireshark로 열기
Follow → TCP Stream 선택


>> 입력한 아이디, 비밀번호, 이후 친 명령어들이 전부 텍스트로 그대로 보임

실습 :: SSH로 접속해서 같은 방식으로 캡처

준비
sudo apt install openssh-server
sudo systemctl start ssh


캡처
sudo tcpdump -i lo port 22 -w ssh_capture.pcap


캡처 중에
ssh localhost 접속해서 로그인



>> Wireshark로 열어서 Follow TCP Stream 시도.
암호화된 바이트열만 보임


실습 :: SSH 인증키 생성


키 생성
ssh-keygen -t ed25519

>> ssh-keygen: SSH 키를 생성/관리하는 도구
• -t: 키 타입(type)을 지정하는 옵션
• ed25519: 사용할 암호화 알고리즘 이름 (Ed25519 타원곡선 방식)
* 타원곡선 암호(ECC): 특정한 수학적 곡선(타원곡선) 위의 점들을 이용해서 키를 만드는 방식
서명 생성/검증 속도가 RSA보다 빠르도 설계 자체가 사이드채널 공격(타이밍 공격 등)에 강하도록 만들어짐

결과
~/.ssh/id_ed25519 (개인키), ~/.ssh/id_ed25519.pub (공개키) 생성

공개키를 서버에 등록
ssh-copy-id localhost


접속
ssh localhost

>> 비밀번호 입력 없이 바로 접속 가능

실습 :: SSH 파일 전송 (SCP) 실습

명령어
scp test.txt localhost:/tmp/

>> SSH를 이용해서 파일을 원격지로 안전하게 복사(전송)하는 명령어로, SSH 연결을 통해 파일이 암호화된 채로 전송
scp localhost:/tmp/test.txt ./ 로 반대로도 전송 가능


실습 :: SSH 포트 포워딩(터널링)


명령어
ssh -L 8080:localhost:80 localhost

>>  SSH 포트 포워딩(터널링)을 만드는 명령어로, SSH로 접속하는 동시에, 로컬 포트와 원격 포트를 연결하는 터널 생성


로컬 8080번 포트로 접속하면 SSH 터널을 통해 원격지의 80번 포트로 연결
브라우저에서 localhost:8080 접속해보면 실제로 원격 서버의 웹 서비스가 뜨는 걸 확인 가능

>> VPN 없이도 SSH 하나로 안전한 터널 생성 가능
컴퓨터 전체 트래픽을 다 터널에 태우는 게 아니라, 특정 포트 하나만 콕 집어서 터널을 만들기 때문에 별도 VPN 클라이언트 설치나 서버 쪽 VPN 인프라 구축이 필요 없음