Linux

reverse ssh tunnel

잉규 2021. 8. 21. 14:37

수많은 시스템이 있고, 원격접속을 통해 지원을 하는경우가 많다.

 

하지만, 원격으로 접속하기위해서는 상용통신망을 이용해야하는데 해당 IP가 고정이 아닌 경우가 많다. 이런 경우 접근을 하기위해 reverse ssh 터널을 뚫는다.

 

그러기 위해 아래 스크립트를 systemd에 등록 후 사용을 하면 된다.

#!/bin/bash

REMOTE_HOST=$1
REMOTE_PORT=$2

PORT=22

COMMAND="ssh -fN -R ${REMOTE_PORT}:localhost:${PORT} $REMOTE_HOST"


while :
do
    pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND

    ssh $REMOTE_HOST netstat -an | egrep "tcp.*:${REMOTE_PORT}.*LISTEN" \
        > /dev/null 2>&1
    if [ $? -ne 0 ] ; then
        pkill -f -x "$COMMAND"
        $COMMAND
    fi
    sleep 60
done

각 ssh 옵션에 대한 설명은 아래와 같다.

  • -f: 백그라운드로 실행될 수 있도록 프로세스를 fork
  • -N: remote 명령어를 실행하지 않음
  • -fN: 원격지에 로그인하지 않고 백그라운드로 터널만 생성

REMOTE_HOST와 REMOTE_PORT는 해당 서버의 남아있는 포트와 host를 입력하면 된다.

 

ssh -p REMOTE_PORT <ID>@REMOTE_HOST를 통해 접속이 가능하다.