#!/bin/bash

# 定义变量
PASSWORD="ilovegyh0809"
PUBLIC_IP="184.170.211.33"
USER="root"
ANOTHER_PUBLIC_PORT="8899"

# 检查 expect 是否安装
if ! command -v expect &> /dev/null
then
    echo "expect 未安装，请先安装 expect。"
	apt install -y expect
    exit 1
fi

# 获取IP地址
PRIVATE_IP_B=$(route -n | grep 'UG[ \t]' | awk '{print$NF}' | xargs -I {} ip addr show {} | grep 'inet '| awk '{print$2}' | cut -d'/' -f1 | head -n 1)

# 定义 IPv4 地址的正则表达式
ipv4_regex='^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'

# 使用正则表达式进行匹配
if [[ $PRIVATE_IP_B =~ $ipv4_regex ]]; then
    echo "$PRIVATE_IP_B 是有效的 IPv4 地址"
else
    echo "$PRIVATE_IP_B 不是有效的 IPv4 地址"
	exit 1
fi

# 创建 expect 脚本并开启调试
echo "spawn ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -N -f -R $ANOTHER_PUBLIC_PORT:$PRIVATE_IP_B:22 $USER@$PUBLIC_IP -p 8222"
expect -d -c "
    spawn ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -N -f -R $ANOTHER_PUBLIC_PORT:$PRIVATE_IP_B:22 $USER@$PUBLIC_IP -p 8222
    expect {
        \"*yes/no*\" { send \"yes\r\"; exp_continue }
        \"*password:*\" { send \"$PASSWORD\r\" }
    }
    sleep 120
" > /tmp/expect_debug.log 2>&1 &

echo "反向代理已尝试在后台启动，使用的内网服务器 B 的 IP 地址为: $PRIVATE_IP_B"
echo "调试信息已输出到 /tmp/expect_debug.log"

while true
do
    echo "Keep running..."
    sleep 60
done
