51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

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

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

msmtp 和 mutt安装 {#msmtp-%E5%92%8C-mutt%E5%AE%89%E8%A3%85}

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

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

核心脚本 {#%E6%A0%B8%E5%BF%83%E8%84%9A%E6%9C%AC}

创建serv00.sh脚本

              
                #!/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

          </code>
        </pre>

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

              
                # 邮件配置
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="标记"


              </code>
            </pre>



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

 
测试脚本 {#%E6%B5%8B%E8%AF%95%E8%84%9A%E6%9C%AC}
--------------------------------------------


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

 
![image.png](http://static.51tbox.com/static/2024-12-11/col/3bfa2d615faf667e2e4502ac1edf75b8/c1825a3beb02422d97a3bc5d4d0d6188.png.jpg)

 
从serv00的面板可以确定是否登录成功 
 ![image.png](http://static.51tbox.com/static/2024-12-11/col/3bfa2d615faf667e2e4502ac1edf75b8/31d3974d340b4b29bfe44d7dcf4e7529.png.jpg)

 
![image.png](http://static.51tbox.com/static/2024-12-11/col/3bfa2d615faf667e2e4502ac1edf75b8/c4439399982c414caef513f554db7f40.png.jpg)

 
配置定时任务 {#%E9%85%8D%E7%BD%AE%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1}
----------------------------------------------------------------


 
https://51tbox.com/ ,只需把脚本位置换掉即可

 
参考: https://linux.do/t/topic/159662


赞(1)
未经允许不得转载:工具盒子 » serv00 ssh登录保活脚本-邮件通知版