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登录保活时,脚本来了

相关推荐
ajassi20001 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎1 小时前
linux 进程信号(下)
linux·运维·服务器
Mikko71 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋1 小时前
Jenkins知识梳理(2)
运维·jenkins
yumgpkpm1 小时前
Acceldata ODP 3.3.6.4 vs CDP Private Cloud Base 7.3.2 对比
大数据·运维·服务器·hadoop·华为·zookeeper·hbase
Liuqy-052 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
quqi992 小时前
git push permission denied (by quqi99)
ssh
考研保研资料分享2 小时前
自动化控制保研经验合辑:上交夏令营、北工大预推免与跨专业面试复盘(2025)
运维·面试·自动化
乐维_lwops3 小时前
2026选择运维监控系统时应该重点考察哪些功能?
大数据·运维·人工智能