본문 바로가기
프로그래밍/server

SSH 터널링 명령어 한번에 이해하기

by 한코코 2022. 11. 30.

SSH(Secure Shell Protocol)란?

SSH 프로토콜(Secure Shell이라고도 함)은 한 컴퓨터에서 다른 컴퓨터로 보안 원격 로그인을 위한 방법입니다. 강력한 인증을 위한 몇 가지 대체 옵션을 제공하며 강력한 암호화로 통신 보안 및 무결성을 보호합니다. 보호되지 않는 로그인 프로토콜(예: telnet , rlogin ) 및 안전하지 않은 파일 전송 방법(예: FTP ) 에 대한 안전한 대안 입니다. (ssh 공식홈페이지)

 

 

SSH 포트 포워딩, 일명 SSH 터널링이란 무엇입니까?

SSH 포트 포워딩은 클라이언트 시스템에서 서버 시스템으로 또는 그 반대로 애플리케이션 포트를 터널링하기 위한 SSH 의 메커니즘입니다. 방화벽을 통과 하는 레거시 응용 프로그램에 암호화를 추가하는 데 사용할 수 있으며 일부 시스템 관리자와 IT 전문가는 이를 사용 하여 가정용 컴퓨터에서 내부 네트워크로 백도어를 엽니 다. 또한 인터넷에서 내부 네트워크로의 액세스를 열기 위해 해커와 맬웨어에 의해 악용될 수 있습니다. 더 광범위한 개요 는 SSH 터널링 페이지를 참조하십시오 . (ssh 공식홈페이지)

 

 

 

왜 SSH 터널링을 사용해야할까

보안상 문제로 서로 다른 포트끼리 접속하려고하면 방화벽에 막혀서 불가능하다.

 

 

그걸 가능하게 해주는게 SSH 터널링이다.

터널링 이미지 참고 블로그

 

 

 

 

 

SSH 터널링 명령어

ssh -i helloKey.pem -L3307:localhost:3306 ubuntu@3.10.299.448

그러니까 이게 무슨 말이냐면,

  1. SSH 프로토콜로 원격제어를 할건데(ssh를 할 수 있는 pem키),
  2. 3307포트로 local(현재 내가 사용하는 PC)에 접속할시,
  3. IP 3.10.299.448를 갖고있는 PC의 3306번 포트로 접속한다는 뜻이다.

 

 

실습해보기

원격접속한 SSH PC (mysql 사용중으로 기본포트인 3306을 사용하고있다.)

 

포트 3307로 접속한 local PC

 

데이터베이스랑 연결되어 있는 DBeaver에 포트3307과 포트3306이 활성화 된것을 확인할 수 있다.

 

 

 

 

다음 명령어를 입력하면 (mac에서 shell을 사용하는 명령어) 현재 열려있는 port를 확인할 수 있다.

$ sudo lsof -PiTCP -sTCP:LISTEN

mysqld는 mysql의 서버고 기본적으로 3306이라고 지정되어있다.

나는 Mariadb를 사용하고있지만 Mariadb는 mysql의 한 버젼이므로 역시 3306가 기본으로 설정되어 있다.

원격으로 접속한 ssh는 포트 3307이 열려있는 것을 확인할 수 있다.

 

현재 열려있는 포트에 대해서 자세히 확인하고 싶다면 다음 명령어를 사용하면 된다.

lsof (list open files)

시스템에서 열린 파일 목록을 알려주고 사용하는 프로세스, 디바이스 정보, 파일의 종류등 상세한 정보를 출력해 준다.

sudo lsof -i :확인할 포트번호
sudo lsof -i :3306
sudo lsof -i :3307

어떤 port가 열려있고 누가 사용중인지 모두 출력된다.

 

 

참고로 터널링을 사용하지 않고 mysql에 접속하는 명령어는 다음과 같다.

mysql -h서버 -u아이디 -p비밀번호 데이터베이스명

댓글