Files
caliverse_doc/04. 서버설정/Shell Script/터널링스크립트/ssh-tunneling-live.sh
2025-05-01 07:27:54 +09:00

104 lines
2.9 KiB
Bash

#!/bin/bash
# 포트 번호와 IP 주소 정의
LOCAL_PORT=2222
REMOTE_IP=172.20.168.216
REMOTE_PORT=2211
SSH_HOST=35.95.190.129
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