网上有很多使用GitHub Actions来保号的教程,关于青龙面板的很少,所以自己研究了一下,下面是我的方案。 如有不当之处,欢迎大家批评指正。注意,此方法有点毛病,请见此处
安装sshpass依赖和jq 青龙面板—依赖管理—Linux—添加sshpass
和jq
sshpass的使用可以见这篇文章
青龙面板—脚本管理—添加sh脚本 以下脚本是GPT写的多账号脚本,(第二次感受到生成式AI的便利,第一次是写openclah的防火墙规则)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #!/bin/bash echo "开始执行任务..." OUTPUT1=$(sshpass -p '密码' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@主机 "ps -A; exit" 2>&1) if [ $? -ne 0 ]; then echo "执行命令失败: $OUTPUT1 " exit 1 fi OUTPUT2=$(sshpass -p '密码' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt 用户名@主机 "ps -A; exit" 2>&1) if [ $? -ne 0 ]; then echo "执行命令失败: $OUTPUT2 " exit 1 fi echo "输出1:\n$OUTPUT1 " echo "输出2:\n$OUTPUT2 " echo "任务执行完成" TOKEN="机器人token" CHAT_ID="用户id" MESSAGE="任务执行完成\n\n输出1:\n$OUTPUT1 \n\n输出2:\n$OUTPUT2 " MESSAGE_ENCODED=$(echo -e "$MESSAGE " | jq -sRr @uri) curl -s -X POST "https://api.telegram.org/bot$TOKEN /sendMessage" \ -d "chat_id=$CHAT_ID &text=$MESSAGE_ENCODED "
记得把其中的密码、用户名、主机、机器人token、用户id修改为自己的。
更新脚本 后面闲着没事又整了两个号,发现脚本添加账号不方便,而且没有报错的提示,有指令输入错误就会卡死’ps -A; exit’没用,所以又去和GPT聊了聊,更新下面几点:
多账号添加更方便;
设置了ssh超时,避免了脚本卡死;
电报消息可以提示哪些账号出错。
如有连接不上可以检查是否在 https://www.serv00.com/ip_unban/ 解锁了IP(我调试脚本就把我IP禁过😂)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 #!/bin/bash echo "开始执行任务..." declare -A OUTPUTShas_error=false successful_commands=() failed_commands=() 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 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 MESSAGE_ENCODED=$(echo -e "$MESSAGE " | jq -sRr @uri) 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,即不保存任何主机密钥。这也是为了避免在自动化脚本中出现提示。
由上面两条可见此方法不是很安全,所以大家自行选择是否使用此方法。
-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