본문 바로가기
320x100
320x100

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

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

입사를 해서 회사 일을 해보면, 이런 단어들을 들어볼 수 있을 것이다 로컬 서버, 개발 서버, 스테이징 서버, 배포 서버, 테스트 서버 등등 큰 기업에 가면 xx서버에 접속해서, 변화점이 있는 파일

code-boki.tistory.com

이 글에서 간단하게 telnet과 ssh의 차이점에 대해서 알 수 있다
 
https://code-boki.tistory.com/142

원격 서버 접속하기(4) - ssh 접속(feat. 개인키/공개키로 접속)

먼저 https://code-boki.tistory.com/141 원격 서버 접속하기(3) - ssh 접속(feat. 개인키/공개키 파일 생성) 먼저 https://code-boki.tistory.com/140 원격 서버 접속하기(2) - ssh 접속(feat. ID/PW) https://code-boki.tistory.com/135

code-boki.tistory.com

그리고 이전 포스팅 글도 참고하면 좋다
 
일전의 테스트와 같이 내 개인 맥북 2개로 SSH를 실습하며 동작과정을 알아볼 것이다
 

현재 맥북(SSH 클라이언트) - 192.168.123.101

whoami
ifconfig | grep inet | grep 192.168.123
맥북1 - boki(192.168.123.101)

 

접속할 맥북(SSH 서버) - 192.168.123.104

whoami
ifconfig | grep inet | grep 192.168.123
맥북2 - tester(192.168.123.104)

 
 
telnet은 데이터가 평문으로 전송되고, ssh는 데이터를 암호화해서 전송한다고 한다
정말일까?
 

Telnet(23)

1. telnetd 사용

서버 - 192.168.123.104

macOS에는 기본적으로 telnet관련 패키지가 설치되어 있지 않다

  • telnet 설치
brew install telnetd
  • telnet 서버 실행
telnetd -debug

telnet 서버(192.168.123.104)의 23번 포트에서 대기

클라이언트 - 192.168.123.101

  • telnet 서버 접속
telnet 192.168.123.104

 

인증(로그인) 후 명령어 테스트

인증(로그인) 후 여러 명령어 테스트

telnet > wireshark로 패킷분석

  • 필터링
tcp port 23 and host 192.168.123.104
  • Follow TCP Stream

 
아이디(usename)와 비밀번호를 입력하는 부분부터.. 키보드제어/화면제어 하는 부분을 제외하면 echo hero 등등..
서버와 클라이언트가 무슨 내용을 주고받았는지 확인할 수 있다

 
2. nc 사용

서버 - 192.168.123.104

nc 커맨드를 사용해서 23번 포트에서 listening

nc -l 23

 

클라이언트 - 192.168.123.101

telnet 명령어로 서버에 접속

telnet 192.168.123.104

 
메시지 주고받기

hello
hi
my name is boki
wow, you are very handsome
thank you. you are so nice

 

telnet > wireshark로 패킷분석

  • 필터링
tcp port 23 and host 192.168.123.104
  • Follow TCP Stream

이번에도 서버와 클라이언트가 무슨 내용을 주고받았는지 확인할 수 있다
 

SSH(22)

서버 - 192.168.123.104

클라이언트 - 192.168.123.101

ssh 192.168.123.104

 
 
ssh 커맨드로 서버에 접속
접속 후 명령어 테스트

telnet > wireshark로 패킷분석

  • 필터링 및 Follow TCP Stream
tcp port 22 and host 192.168.123.104

 
23번 포트를 사용하는 telnet과 다르게 ssh는 22번 포트를 사용한다

뭔가 알 수 없는 문자들이 계속 쓰인다.. 이 중에 눈여겨 볼거는 diffie-hellman-group이란 키워드이다

찾기로 echo 라는 글자를 찾아도 안보인다
 
 

Conclusion(결론)

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

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

입사를 해서 회사 일을 해보면, 이런 단어들을 들어볼 수 있을 것이다 로컬 서버, 개발 서버, 스테이징 서버, 배포 서버, 테스트 서버 등등 큰 기업에 가면 xx서버에 접속해서, 변화점이 있는 파일

code-boki.tistory.com

이 글에서 SSH에 대한 내용을 보면 SSH 클라이언트와 서버간에 세션이 만들어지고, 데이터를 암호화해서 전송한다고 했다
이 때 서로 데이터를 주고받을 때 암호화/복호화 때 사용할 대칭키(세션키)가 생성이 되고, 교환이 이루어지게 된다
이 때 대칭키(세션키)를 주고 받을 때 사용하는 알고리즘은 위에 SSH 패킷 분석에서 나온 diffie-hellman 알고리즘을 사용한다
그리고 이 대칭키로 서로 주고받는 데이터를 암호화하는 것이다
SSH의 연결이 끊어지면 이 대칭키(세션키)는 더 이상 사용할 수 없게된다
그래서 세션(Session) 키 라고 부르는 것이기도 하다
 
SSH의 흐름에서 중요 키 포인트를 나열하면
 
1. 최초 접속 이후 클라이언트의 known_hosts에 쓰인 접속했던 서버의 공개키와 현재 접속할 서버의 공개키를 비교해서 등록된 서버가 맞는지 확인한다
=> 간단한 검증
2. ID(unix에서는 username)와 password 또는 개인키를 서버로 전송해서 인증을 거친다. 이때 개인키 인증인 경우 서버의 authorized_keys 파일에 클라이언트의 공개키와 쌍을 맞춰서 알고리즘을 풀 수 있어야 접속이 가능하다
=> 인증
3. 암호화된 세션을 생성하고, 이 위에서 클라이언트와 서버는 통신을 하며, 디피-헬만 알고리즘을 통해 데이터를 암/복호화 한다
=> SSH 터널링
 
결국 SSH는 접속시 비대칭키(공개키) 사용, 인증시 옵셔널하게 비대칭키(개인키) 사용, 데이터를 주고받을 때는 대칭키(세션키)를 사용한다
 

마지막으로 패킷 분석(감청)은 법적으로 처벌 받을 수도 있다

나는 개인 노트북으로 테스트를 하였다

320x100

댓글