1Panel自动更新脚本来啦(不适用于启用了MFA的1Panel)

本升级脚本调用的是1panel自身的更新API,安全升级有保障

  1. 在1panel面板中添加计划任务,建议为每日的凌晨。
  2. 任务类型选择 Shell 脚本
  3. 填入如下脚本,在对应位置填入你的1panel登录用户名和密码。
USERNAME=""                          # 请修改为你的1panel用户名
PASSWORD=""                          # 请修改为你的1panel密码



# 请勿修改以下内容
if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
    echo "请修改脚本中的USERNAME和PASSWORD变量"
    exit 1
fi

BASE_URL=$(1pctl user-info | grep "面板地址:" | awk '{print $2}' | sed 's:/$::')
COOKIE_FILE=$(mktemp)
LOGIN_RESPONSE=$(curl -k -s --location --request POST "$BASE_URL/api/v1/auth/login" \
--data-raw '{
    "authMethod": "session",
    "captcha": "",
    "captchaID": "",
    "ignoreCaptcha": true,
    "language": "zh",
    "name": "'"$USERNAME"'",
    "password": "'"$PASSWORD"'"
}' --cookie-jar $COOKIE_FILE)

CODE=$(echo $LOGIN_RESPONSE | grep -o '"code":[0-9]*' | awk -F':' '{print $2}')

UPGRADE_RESPONSE=$(curl -k -s --request GET "$BASE_URL/api/v1/settings/upgrade" --cookie $COOKIE_FILE)

CODE=$(echo $UPGRADE_RESPONSE | grep -o '"code":[0-9]*' | awk -F':' '{print $2}')
DATA=$(echo $UPGRADE_RESPONSE | grep -o '"data":[^,}]*' | awk -F':' '{print $2}')
LATEST_VERSION=$(echo $UPGRADE_RESPONSE | grep -o '"latestVersion":"[^"]*' | sed 's/"latestVersion":"//')

if [ "$CODE" == "200" ] && [ "$DATA" == "null" ]; then
    echo "无更新可用"
else
    echo "有更新可用,最新版本号:$LATEST_VERSION,正在更新..."
    UPDATE_RESPONSE=$(curl -k -s --location --request POST "$BASE_URL/api/v1/settings/upgrade" \
    --data-raw '{
        "version": "'"$LATEST_VERSION"'"
    }' --cookie $COOKIE_FILE)
    UPDATE_CODE=$(echo $UPDATE_RESPONSE | grep -o '"code":[0-9]*' | awk -F':' '{print $2}')
    if [ "$UPDATE_CODE" == "200" ]; then
        echo "升级成功"
    else
        echo "升级失败"
    fi
fi

rm $COOKIE_FILE -f

  1. 效果

1 个赞

手动点赞 :+1:

当前版本v1.9.5,但是提示有更新,更新出错

重新运行试试


没法用呀,不知道什么原因


破案了,需要在此处设置服务器地址。

————2024年3月4日 23:03:28更新————
还是不行,卡在此处(第25行)

CODE=$(echo $LOGIN_RESPONSE | grep -o '"code":[0-9]*' | awk -F':' '{print $2}')

CODE获取不到值

————2024年3月4日 23:28:43更新————


找到了原因,由于我设置了安全面板,所以第12行$BASE_URL获取到的地址包含安全地址,但是登录api是不包含安全地址的。登录的时候请求的其实是一个错误的URL。

假设登录面板为 http://127.0.0.1/,通过sed 's:/$::'可以变成 http://127.0.0.1
但是对于安全面板 http://127.0.0.1/aaabbbccc,`sed ‘s:/$::’``无法剔除安全面板。

————2024-03-05 00:00:13更新————

当将第10行修改为

BASE_URL=$(1pctl user-info | grep "面板地址:" | awk '{print $2}' | sed 's|/[^/]*$||')

可以解决登录的问题,但是登录的结果是"code":406,"message":"ErrAuth","data":null}
问题还是没法解决。

————2024-03-06 23:32:23更新————

如果有安全入口,需要在请求头中加入entrancecode,其值为安全入口的base64编码。

USERNAME=""                          # 请修改为你的1panel用户名
PASSWORD=""                          # 请修改为你的1panel密码
SAFE_ENTRANCE=""               # 请修改为你的1panel安全入口

# 请勿修改以下内容
if [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
    echo "请修改脚本中的USERNAME和PASSWORD变量"
    exit 1
fi

BASE_URL=$(1pctl user-info | grep "面板地址:" | awk '{print $2}' | sed 's|/[^/]*$||')
COOKIE_FILE=$(mktemp)
entrance_code=$(echo -n $SAFE_ENTRANCE | base64)
LOGIN_RESPONSE=$(curl -k -s --location --request POST "$BASE_URL/api/v1/auth/login" \
--header "entrancecode: ${entrance_code}" \
--data-raw '{
    "authMethod": "session",
    "captcha": "",
    "captchaID": "",
    "ignoreCaptcha": true,
    "language": "zh",
    "name": "'"${USERNAME}"'",
    "password": "'"${PASSWORD}"'"
}' --cookie-jar $COOKIE_FILE)
echo $LOGIN_RESPONSE
rm $COOKIE_FILE -f

这样就可以正常登录。

{"code":200,"message":"","data":{"name":"username","token":"","mfaStatus":""}}

好的这个问题我再研究研究 :grinning:

我已经研究明白了:grinning: