104 lines
2.9 KiB
Bash
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
|
|
|