serv00 ssh登录保活脚本-邮件通知版

适用于自己有服务器情况,ssh定时登录到serv00,并在登录成功后发送邮件通知

msmtp 和 mutt安装

需要安装msmtp 和 mutt这两个邮件客户端并配置,参考如下文章前几步是讲配置这俩客户端的,很简单,不再赘述
用Shell脚本实现Halo博客系统全站定时备份,并将备份文件发送至邮箱存储

可能有些系统没有装sshpass,需要apt install sshpass

核心脚本

创建serv00.sh脚本

bash 复制代码
#!/bin/bash

# 清理mutt临时文件
cat /dev/null > ~/sent

echo "开始 SSH 连接尝试"

# 从 .env 文件加载环境变量
if [ -f .env ]; then
    # 使用 source 命令加载 .env 文件中的变量
    source .env
else
    echo "错误:未找到 .env 文件,请确保 .env 存在并正确配置。"
    exit 1
fi

# 定义一个函数来处理 SSH 连接
function try_ssh_connection {
    local server=$1
    local user=$2
    local password=$3
    local label=$4
    local message=""

    echo "正在尝试连接到 $server,用户名:$user(连接:$label)"
    timeout 30 sshpass -p "$password" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt "$user@$server" "echo \"Hello from $label\"; date; sleep 3"
    result=$?
    if [ $result -eq 124 ]; then
        echo "错误:$label 连接超时"
        message="Serv00保活SSH连接超时!"
    elif [ $result -ne 0 ]; then
        echo "错误:$label 连接失败"
        message="Serv00保活SSH连接失败!"
    else
        echo "$label 连接成功!"
        message="Serv00保活SSH连接成功!"
    fi

    # 发送邮件通知
    echo -e "状态: $message\n\nSSH连接: $label\n连接到: $server\n用户名: $user\n面板地址: https://panel13.serv00.com/\n执行器: ***" | mutt -s "$MAIL_SUBJECT" "$MAIL_TO"
    echo "邮件通知已发送!"
    sleep 3
}

# 遍历所有 SSH 配置并进行连接尝试
# 假设最多有 10 个用户配置(可以根据需要修改)
for idx in $(seq 1 10); do
    server_var="SSH_SERVER_$idx"
    user_var="SSH_USER_$idx"
    pass_var="SSH_PASS_$idx"
    label_var="SSH_LABEL_$idx"

    # 动态获取环境变量的值
    server="${!server_var}"
    user="${!user_var}"
    password="${!pass_var}"
    label="${!label_var}"

    # 如果某些变量为空,说明该用户配置不存在,跳过当前循环
    if [ -z "$server" ] || [ -z "$user" ] || [ -z "$password" ] || [ -z "$label" ]; then
        continue
    fi

    try_ssh_connection "$server" "$user" "$password" "$label"
done

echo "所有 SSH 连接尝试已完成。"
sleep 3
echo "脚本运行完毕,正在退出..."
sleep 3
exit 0

创建.env文件用于存储敏感信息

bash 复制代码
# 邮件配置
MAIL_TO=发给谁的邮箱
MAIL_SUBJECT="SSH 连接状态通知"

# SSH 配置(动态编号)
SSH_SERVER_1=连接地址
SSH_USER_1=用户名
SSH_PASS_1="用户密码"
SSH_LABEL_1="标记"

SSH_SERVER_2=连接地址
SSH_USER_2=用户名
SSH_PASS_2="用户密码"
SSH_LABEL_2="标记"

有多个就变序号就可以,另外超过10个,改一下上面脚本的for idx in $(seq 1 10); do

测试脚本

测试 bash 脚本名即可,成功执行如下图,检查邮箱是否收到邮件

从serv00的面板可以确定是否登录成功

配置定时任务

参考这里,只需把脚本位置换掉即可

参考:当你注册了很多个Serv00需要SSH登录保活时,脚本来了

相关推荐
johnny2334 小时前
运维管理面板:AcePanel、OpenOcta、DeepSentry
运维
青梅橘子皮4 小时前
Linux---基本指令
linux·运维·服务器
REDcker5 小时前
Linux信号机制详解 POSIX语义与内核要点 sigaction与备用栈实践
linux·运维·php
cui_ruicheng5 小时前
Linux进程间通信(三):System V IPC与共享内存
linux·运维·服务器
ACP广源盛139246256737 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
峥无8 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
码云数智-大飞8 小时前
本地部署大模型:隐私安全与多元优势一站式解读
运维·网络·人工智能
Harvy_没救了9 小时前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
春风有信10 小时前
【2026.05.01】Windows10安装Docker Desktop 4.71.0.0步骤及问题解决
运维·docker·容器
2401_8734794010 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络