macos上可用shell脚本通过curl调用钉钉/企微webhook推送告警,原理同linux;需适配日志路径(/var/log/system.log或syslog命令)、权限(sudo)及工具链(如fswatch替代inotifywait),无需额外服务。
macos 上用 shell 脚本推送钉钉或企业微信告警,和 linux 原理一致,核心是调用 webhook 接口发 http 请求。区别在于日志路径、权限模型和默认工具链略有不同,但无需额外安装复杂服务,原生 curl 就够用。
确认告警触发源和权限
macOS 默认不生成 /var/log/secure 或 auth.log,登录失败日志主要记录在:
– /var/log/system.log(含 ssh 登录尝试)
– /var/log/asl/(Apple System Log,需用 syslog 命令查询)
执行以下命令验证是否有失败登录记录:
sudo grep -i "failed.*password\|invalid user" /var/log/system.log | tail -3sudo syslog -F '$Time $Message' -k Sender sshd -k Message 'Failed' | tail -3
注意:macOS 的 syslog 权限更严格,需用 sudo;若日志轮转频繁,建议配合 tail -F 实时监听。
获取并配置钉钉/企微机器人 Webhook
步骤与 Linux 完全相同:
- 钉钉:群设置 → 智能群助手 → 添加自定义机器人 → 复制 Webhook URL(形如
https://oapi.dingtalk.com/robot/send?access_token=xxx) -
企业微信:群管理 → 添加群机器人 → 复制 Webhook URL(形如
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx) - 安全建议:启用 IP 白名单,填入 macOS 服务器的公网或内网 IP(如
192.168.1.50),避免 token 泄露滥用
编写可运行的推送脚本
保存为 ~/bin/dingtalk-alert.sh(记得 chmod +x),支持 text 和 markdown 两种格式:
解析微信公众号文章,提取标题、作者、正文、图片等信息。用户发送链接(mp.weixin.qq.com)时触发,自动提取内容并可保存至飞书表格。
- text 模式(最简可用):
#!/bin/bash<br>WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=你的token"<br>MSG="⚠️ macOS 告警|$(date '+%Y-%m-%d %H:%M')|用户:$(whoami)|IP:$(ipconfig getifaddr en0)"<br>curl -s -X POST "$WEBHOOK" \<br> -H 'Content-Type: application/json' \<br> -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"$MSG\"}}" - markdown 模式(信息更清晰):
"msgtype": "markdown",<br>"markdown": {<br> "content": "### ⚠️ macOS 登录异常\n\n- **时间**: $(date '+%Y-%m-%d %H:%M:%S')\n- **来源IP**: 192.168.1.100\n- **用户**: root\n- **服务**: sshd"
企业微信只需把 Webhook 地址换成企微地址,消息体结构保持一致(企微也支持 markdown)。
绑定日志事件自动触发(可选进阶)
macOS 不自带 inotifywait,但可用原生 fswatch 或轮询替代:
- 安装 fswatch:
brew install fswatch - 监听 system.log 变化并过滤关键词:
fswatch -o /var/log/system.log | while read _; do<br> if sudo grep -q "Failed password" /var/log/system.log | tail -1; then<br> ./dingtalk-alert.sh "检测到 SSH 登录失败"<br> fi<br>done
- 更稳妥方式:用
launchd定时每分钟执行一次检查脚本(类似 crontab),避免漏报










