#!/bin/bash # 포트 번호와 IP 주소 정의 LOCAL_PORT=3311 REMOTE_IP=172.50.173.121 REMOTE_PORT=2211 SSH_HOST=100.20.151.224 SSH_PORT=2211 SSH_KEY=/home/admintool/USWest2-KeyPair.pem # 함수: SSH 터널 시작 start_tunnel() { echo "Starting SSH tunnel..." # 기존 포트 사용 여부 확인 if sudo lsof -i :$LOCAL_PORT > /dev/null 2>&1; then echo "Port $LOCAL_PORT is already in use." # 기존 포트에 대해 열려 있는 프로세스 찾기 PIDS=$(sudo lsof -ti :$LOCAL_PORT) if [ -n "$PIDS" ]; then echo "Terminating existing connections..." for PID in $PIDS; do sudo kill -9 $PID done # 프로세스가 성공적으로 종료되었는지 확인 sleep 1 if ! ps -p $PIDS > /dev/null 2>&1; then echo "Existing connections terminated. Establishing new SSH tunnel..." sudo ssh -f -N -L $LOCAL_PORT:$REMOTE_IP:$REMOTE_PORT ubuntu@$SSH_HOST -p $SSH_PORT -i $SSH_KEY -o StrictHostKeyChecking=no # 결과 확인 if [ $? -eq 0 ]; then echo "SSH tunnel established successfully." else echo "Failed to establish SSH tunnel." fi else echo "Failed to terminate existing connections. Unable to establish a new SSH tunnel." fi else echo "No existing PIDs found, but port $LOCAL_PORT is in use." fi else echo "Port $LOCAL_PORT is free. Establishing new SSH tunnel..." sudo ssh -f -N -L $LOCAL_PORT:$REMOTE_IP:$REMOTE_PORT ubuntu@$SSH_HOST -p $SSH_PORT -i $SSH_KEY -o StrictHostKeyChecking=no # 결과 확인 if [ $? -eq 0 ]; then echo "SSH tunnel established successfully." else echo "Failed to establish SSH tunnel." fi fi } # 함수: SSH 터널 종료 stop_tunnel() { echo "Stopping SSH tunnel..." # 포트가 사용 중인지 확인하고 종료 if sudo lsof -i :$LOCAL_PORT > /dev/null 2>&1; then # 기존 포트에 대해 열려 있는 프로세스 찾기 PIDS=$(sudo lsof -ti :$LOCAL_PORT) for PID in $PIDS; do sudo kill -9 $PID done echo "SSH tunnel stopped." else echo "No SSH tunnel found on port $LOCAL_PORT." fi } # 함수: SSH 터널 상태 확인 status_tunnel() { echo "Checking SSH tunnel status..." if sudo lsof -i :$LOCAL_PORT > /dev/null 2>&1; then echo "SSH tunnel is running on port $LOCAL_PORT." else echo "No SSH tunnel is running on port $LOCAL_PORT." fi } # 파라미터에 따라 함수 호출 case "$1" in start) start_tunnel ;; stop) stop_tunnel ;; status) status_tunnel ;; *) echo "Usage: $0 {start|stop|status}" exit 1 ;; esac