You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Unix Shell脚本从远程服务器向指定用户发送邮件

实现带命令行参数的远程系统监控邮件脚本

我来帮你梳理并优化这个脚本,让它更健壮、易维护,完美实现「通过命令行参数指定用户和邮箱,远程收集主机信息并发送邮件」的需求。

1. 主脚本 test.sh

这个脚本负责接收命令行参数、遍历远程主机列表,以及触发远程命令执行。我添加了参数合法性检查,避免因参数缺失导致的错误。

#!/bin/sh
# 检查命令行参数是否完整
if [ $# -ne 2 ]; then
    echo "❌ 用法错误!正确格式: $0 <远程主机用户名> <目标邮箱地址>"
    exit 1
fi

# 赋值命令行参数到变量
REMOTE_USER=$1
TARGET_EMAIL=$2

# 读取远程主机IP列表(ip.txt每行一个IP)
REMOTE_IPS=$(cat ip.txt)

# 加载远程执行的命令脚本内容
REMOTE_SCRIPT_CONTENT=$(cat remote_cmds.sh)

# 遍历每个远程主机执行监控脚本
for ip in $REMOTE_IPS; do
    echo "=== 正在处理远程主机: $ip ==="
    # 远程登录并执行脚本,传递目标邮箱变量
    ssh -o StrictHostKeyChecking=no -l $REMOTE_USER $ip "export TARGET_EMAIL=$TARGET_EMAIL; $REMOTE_SCRIPT_CONTENT"
done

2. 远程执行脚本 remote_cmds.sh

这个脚本会在远程主机上运行,负责收集系统信息并发送邮件。我优化了信息展示格式,让邮件内容更易读。

#!/bin/sh
# 收集系统核心信息
HOST_INFO=$(hostname)
DISK_STATUS=$(df -h)
RAM_STATUS=$(free -h)

# 构造邮件内容
MAIL_BODY="
📋 系统监控报告 - $HOST_INFO

### 主机名
$HOST_INFO

### 磁盘使用情况
$DISK_STATUS

### 内存使用情况
$RAM_STATUS
"

# 发送邮件到指定邮箱
echo "$MAIL_BODY" | mailx -s "【系统监控】$HOST_INFO 状态报告" $TARGET_EMAIL

3. 使用步骤

  • 准备主机列表:创建ip.txt文件,每行写入一个需要监控的远程主机IP,示例:
    192.168.1.20
    192.168.1.21
    
  • 设置执行权限:给两个脚本添加可执行权限
    chmod +x test.sh remote_cmds.sh
    
  • 运行脚本:按照指定格式执行主脚本
    ./test.sh root admin@example.com
    

关键注意事项

  • 确保远程主机已安装mailx工具(Debian/Ubuntu用apt install mailutils,CentOS/RHEL用yum install mailx)。
  • 建议配置SSH密钥免密登录远程主机,否则每次执行都会提示输入密码,影响自动化流程。
  • 如果邮件发送失败,检查远程主机的邮件服务配置(比如sendmail或postfix是否正常运行)。

内容的提问来源于stack exchange,提问作者user6690412

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:49