如果我通过 NTFY 接受外部连接的计算机成功 SSH 登录,我希望收到通知。由于我经常在本地登录这台计算机 (192.168.1.0/24),因此我希望避免在该范围内连接时收到通知。
我正在遵循此处列出的示例: https://docs.ntfy.sh/examples/#ssh-login-alerts
通知工作正常,但我正在尝试修改我的脚本以排除 192.168.*,我的 bash 很糟糕,我已经为此努力了几个小时。
我已将 ntfy-ssh-login.sh 修改为:
#!/bin/bash
if [ "${PAM_TYPE}" = "open_session" ]; then
if [ "${PAM_RHOST}" != 192.168.* ]; then
curl \
-H prio:high \
-H tags:warning \
-d "SSH login: ${PAM_USER} from ${PAM_RHOST}" \
http://192.168.1.137:8777/alerts
fi
fi
如果 PAM_RHOST 以 192.168 开头,我预计不会向 NTFY 发送警报。但是,它始终会发送警报。我知道 PAM_RHOST 的值以该值开头,因为它包含在警报中:
30/08/2023, 22:12 Priority 4
⚠️ SSH login: --redacted-- from 192.168.1.11
192.168.1.11 由 设定${PAM_RHOST}
。
我确信我正在做一些愚蠢的事情。
答案1
将我的评论变成某种答案。
该[
测试不会将*
字符视为通配符/模式,因此${PAM_RHOST}
永远不会匹配,并且then
始终会评估您的表达式。
由于您正在使用/bin/bash
,因此您可以使用测试来处理与作为模式的[[
比较:*
if [[ "${PAM_RHOST}" != 192.168.* ]];