网上有很多使用GitHub Actions来保号的教程,关于青龙面板的很少,所以自己研究了一下,下面是我的方案。如有不当之处,欢迎大家批评指正。
安装sshpass依赖和jq
青龙面板—依赖管理—Linux—添加sshpass
和jq
sshpass的使用可以见这篇文章
添加脚本
青龙面板—脚本管理—添加sh脚本
以下脚本是GPT写的多账号脚本
如有连接不上可以检查是否在 https://www.serv00.com/ip_unban/ 解锁了IP(我调试脚本就把我IP禁过😂)
#!/bin/bash
echo "开始执行任务..."
# 定义一个数组来存储输出和错误信息
declare -A OUTPUTS
# 用于标记是否有命令失败
has_error=false
# 用于存储成功的命令
successful_commands=()
# 用于存储失败的命令
failed_commands=()
# 设置 SSH 超时(单位:秒)
SSH_TIMEOUT=15
# 定义账号、密码和主机信息数组,每个元素包含 "账号:密码:主机",一行一组
CREDENTIALS=(
"账号1:密码1:主机1"
"账号2:密码2:主机2"
)
# 循环遍历每行并执行命令
for cred in "${CREDENTIALS[@]}"; do
IFS=':' read -r user pass host <<< "$cred"
if [ -z "$user" ]; then
continue
fi
OUTPUTS["$user"]=$(sshpass -p "$pass" ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=$SSH_TIMEOUT -t $user@$host "ps -A" 2>&1)
if [ $? -ne 0 ]; then
echo "执行命令失败: $user: ${OUTPUTS["$user"]}"
has_error=true
failed_commands+=("$user")
else
echo "执行命令成功: $user: ${OUTPUTS["$user"]}"
successful_commands+=("$user")
fi
done
# 构建 Telegram 消息内容
TOKEN="机器人token"
CHAT_ID="用户id"
MESSAGE="保号任务执行结果:\n"
# 添加成功的命令到消息
if [ ${#successful_commands[@]} -gt 0 ]; then
MESSAGE+="保号成功:\n"
for user in "${successful_commands[@]}"; do
MESSAGE+="\n$user:\n${OUTPUTS[$user]}\n"
done
fi
# 添加失败的命令到消息
if [ ${#failed_commands[@]} -gt 0 ]; then
MESSAGE+="\n以下账号出错了😭:\n"
for user in "${failed_commands[@]}"; do
MESSAGE+="$user:\n${OUTPUTS[$user]}\n"
done
fi
# 使用 urlencode 对消息进行编码,以便在 URL 中安全传输
MESSAGE_ENCODED=$(echo -e "$MESSAGE" | jq -sRr @uri)
# 发送 Telegram 推送通知
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d "chat_id=$CHAT_ID&text=$MESSAGE_ENCODED"
# 输出最终结果
if [ "$has_error" = true ]; then
echo "请检查输入是否正确,或是否在 https://www.serv00.com/ip_unban/ 解锁了IP"
else
echo "任务执行完成,所有机器保号成功"
fi
附telegram的通知截图
以上代码一些参数的作用
-o StrictHostKeyChecking=no
这是 SSH 的一个选项,表示在连接到新主机时不进行主机密钥检查。这可以避免在第一次连接时出现提示,适用于自动化脚本,但会降低安全性。
-o UserKnownHostsFile=/dev/null
这个选项指定 SSH 不使用已知主机文件(通常是 ~/.ssh/known_hosts),而是将其输出重定向到 /dev/null,即不保存任何主机密钥。这也是为了避免在自动化脚本中出现提示。
<span style=“color:red;”>由上面两条可见此方法不是很安全,所以大家自行选择是否使用此方法。</span>
-tt
这个选项强制分配一个伪终端(pseudo-terminal),这在某些情况下是必要的,尤其是当你需要在远程执行的命令中使用交互式功能时。
ps -A; exit
ps -A
命令用于列出系统上所有正在运行的进程。; exit
可以确保在执行 ps -A 后,无论其成功与否,SSH 会话都会自动退出。如果想"ps-A"成功运行后再退出使用"ps -A && exit"
添加定时任务
青龙面板—定时任务—创建任务
名称随意
命令/脚本填入你自定义的脚本名称,如:
task Serv00.sh
定时规则(cron表达式)
叫GPT帮着写吧,我也不会😂, 下面是每 7 天的 6:00 AM 执行一次。
0 6 */7 * *
点击确定就完成了。
参考文章
- https://gaojilingjuli.blogspot.com/2024/07/sshserv00.html
- https://saika.us.kg/2024/01/27/serv00_logs#%E8%87%AA%E5%8A%A8%E7%BB%AD%E6%9C%9F
- https://linux.cn/article-8086-1.html