Ubuntu校园网自动登录 Shell 脚本(纯 curl 实现,无 Python)+crontab 定时任务

安装curl

curl是 Linux 下的网络请求工具,但 Ubuntu Desktop 默认可能未预装(尤其是精简版 / 最小化安装的系统),而你的脚本核心依赖curl实现网络检测和登录,必须先安装。

步骤 1:安装 curl 工具(仅需执行一次)

打开 Ubuntu 的可视化终端,执行以下命令安装curl
bash
运行
sudo apt update && sudo apt install curl -y
  • sudo apt update:更新软件源列表,确保能找到 curl 包;
  • apt install curl -y:自动安装 curl,-y表示跳过确认步骤。

步骤 2:验证 curl 是否安装成功

安装完成后,执行以下命令验证:
bash
运行
curl --version
如果输出类似curl 7.81.0 (x86_64-pc-linux-gnu) libcurl/7.81.0 OpenSSL/3.0.2...的版本信息,说明安装成功。

配置自动登录脚本

#!/bin/bash

# ========== 配置项(替换为你的实际信息) ==========
# 登录地址(和原Python脚本一致)
LOGIN_URL="http://192.168.200.5/"
# 网络检测地址
CHECK_URL="https://www.baidu.com"
# 登录账号/密码(必填!替换为实际值)
USERNAME="你的登录账号"
PASSWORD="你的登录密码"
# 超时时间/重试次数/检测间隔(和原脚本一致)
TIMEOUT=10
RETRY_COUNT=3
CHECK_INTERVAL=60
# Linux日志路径(替代原C:\netlog)
LOG_DIR="/home/auto/netlog"  # 改为你的用户名auto
LOG_FILE="${LOG_DIR}/network_connector.log"

# ========== 初始化日志目录 ==========
if [ ! -d "${LOG_DIR}" ]; then
    mkdir -p "${LOG_DIR}"
    chmod 755 "${LOG_DIR}"
fi

# ========== 日志函数(统一格式,替代Python logging) ==========
log() {
    local LEVEL=$1
    local MESSAGE=$2
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] [${LEVEL}] ${MESSAGE}" >> "${LOG_FILE}"
}

# ========== 检测网络连通性(替代is_connected函数) ==========
is_connected() {
    # curl参数说明:
    # -s:静默模式  -o /dev/null:丢弃响应内容  -w "%{http_code}":只输出状态码
    local HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout "${TIMEOUT}" "${CHECK_URL}")
    if [ "${HTTP_CODE}" = "200" ]; then
        return 0  # 网络连通
    else
        return 1  # 网络不通
    fi
}

# ========== 执行登录(替代login函数) ==========
login() {
    # 移除错误的Python try:语法
    # 1. 模拟Session GET登录页面(和原Python的session.get一致)
    curl -s -c /tmp/login_cookie.txt --connect-timeout "${TIMEOUT}" "${LOGIN_URL}" > /dev/null
    if [ $? -ne 0 ]; then
        log "ERROR" "获取登录页面失败"
        return 1
    fi

    # 2. POST登录数据(和原Python的session.post一致)
    local LOGIN_RESPONSE=$(curl -s -b /tmp/login_cookie.txt --connect-timeout "${TIMEOUT}" \
        -d "DDDDD=${USERNAME}&upass=${PASSWORD}&0MKKey=登录 Login&v6ip=" "${LOGIN_URL}")

    # 3. 登录后检测网络
    if is_connected; then
        log "INFO" "成功"
        rm -f /tmp/login_cookie.txt  # 清理临时Cookie
        return 0
    else
        log "ERROR" "$(echo ${LOGIN_RESPONSE} | cut -c 1-200)"  # 截取前200字符,和原脚本一致
        rm -f /tmp/login_cookie.txt
        return 1
    fi
}

# ========== 主逻辑(替代main函数) ==========
log "INFO" "保存至: ${LOG_FILE}"
log "INFO" "地址: ${LOGIN_URL}"
log "INFO" "间隔: ${CHECK_INTERVAL}秒"

# 检测网络状态,不通则重试登录
if ! is_connected; then
    log "WARNING" "another"  # 保留原脚本的日志关键词
    # 最多重试3次(和原脚本一致)
    for ((i=1; i<=RETRY_COUNT; i++)); do
        if login; then
            break  # 登录成功,退出重试
        fi
        # 非最后一次失败,等待10秒重试(修复:将Python的time.sleep(10)改为Shell的sleep 10)
        if [ $i -lt $((RETRY_COUNT - 1)) ]; then
            sleep 10
        fi
    done
    # 3次重试均失败
    if [ $i -eq $RETRY_COUNT ] && ! is_connected; then
        log "ERROR" "3f"  # 保留原脚本的日志关键词
    fi
else
    log "DEBUG" "win"  # 保留原脚本的日志关键词
fi

# 清理临时文件
rm -f /tmp/login_cookie.txt 2>/dev/null
exit 0

配置步骤(3 步完成)

步骤 1:赋予脚本执行权限

bash
运行
# 替换为你的脚本实际路径
chmod +x /home/auto/scripts/network_connector.sh

步骤 2:配置 crontab 定时任务(替代 60 秒循环)

bash
运行
# 编辑当前用户的crontab
crontab -e
在文件末尾添加以下内容(每分钟执行一次,和原脚本 60 秒间隔一致):
bash
运行
# 每分钟执行网络登录检测脚本
* * * * * /home/auto/scripts/network_connector.sh
保存退出(vim 编辑器按Esc→输入:wq→回车)。

步骤 3:验证脚本是否正常运行

bash
运行
# 手动执行脚本测试
/home/auto/scripts/network_connector.sh

# 查看日志确认执行结果
cat /home/auto/netlog/network_connector.log

作者: 高志远

高志远,24岁,男生

发表评论

邮箱地址不会被公开。