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

相关推荐
嘉琪coder5 小时前
我做了一个 Chrome 扩展,把 YouTube 播放列表批量变成 AI 可读的本地 Markdown
chrome·开源·浏览器
Databuff5 小时前
AI SSH工具,集齐SSH、SFTP、知识库RAG、AI助手
网络·人工智能·ssh
考虑考虑6 小时前
docker compose环境变量替换
运维·后端·自动化运维
Java陈序员6 小时前
轻量运维面板!一款现代化的服务器控制面板工具!
运维·服务器·python·react.js·github
bosins7 小时前
WSL 迁移指南:如何将 Linux 环境完整复制到另一台电脑
linux·运维·服务器
IT利刃出鞘7 小时前
Docker Compose--安装WordPress--方法/示例
运维·docker·容器
handler019 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
新时代牛马9 小时前
实时 Linux:PREEMPT_RT、延迟来源与观测
linux·运维·服务器
zhexunnb10 小时前
深挖SAP系统模块价值,助力无锡制造企业打通数字化全链路
运维
weipt10 小时前
利用wsl给windows电脑上安装一个ubuntu
linux·运维·ubuntu