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

相关推荐
EMTime3 小时前
Docker运行OpenWRT
运维·docker·容器
lolo大魔王4 小时前
Linux 文件系统超全面详解(原理、结构、挂载、分区、inode、日志、管理命令)
linux·运维·服务器
zyl837216 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry6 小时前
MGRE实验
运维·服务器
stolentime7 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
bush48 小时前
嵌入式linux学习记录四
linux·运维·学习
lihao lihao9 小时前
软硬链接
linux·运维·服务器
TOWE technology9 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
楼田莉子9 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
大明者省10 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记