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

gammu-smsd收到短信时未执行RunOnReceive指定脚本问题求助

排查与解决步骤

第一步:手动复现gammu用户执行场景

直接用以下命令模拟gammu用户触发脚本,查看实时报错:

sudo -u gammu /home/pi/run.sh

90%以上的同场景问题都能通过这一步直接定位报错原因。

第二步:解决最常见的SSH主机验证失败问题

你当前遇到的问题大概率是SSH主机密钥校验拦截:

  • pi用户之前手动连接过10.1.1.219,主机公钥已经存入/home/pi/.ssh/known_hosts,连接时不会触发校验提示
  • gammu用户的家目录下没有对应主机公钥记录,且gammu-smsd调用脚本时是非交互环境,SSH遇到未知主机公钥会直接终止连接,不会弹出确认输入提示

临时修复方法:在SSH命令中添加跳过主机校验参数,修改run.sh内容如下:

#!/bin/sh
/usr/bin/sshpass -p "MY_PASSWORD" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null thomas@10.1.1.219 "/usr/bin/python3 /home/thomas/anydir/grkrt/pshvr.py"

永久安全修复方法:先手动给gammu用户添加主机公钥记录,执行命令后按提示输入yes和远端密码即可:

sudo -u gammu ssh thomas@10.1.1.219

第三步:添加脚本日志辅助排查

如果上述操作后依然有问题,修改run.sh输出全量执行日志,方便定位错误:

#!/bin/sh
# 把所有标准输出和错误输出重定向到日志文件
exec >> /tmp/gammu_smsd_run.log 2>&1
echo "=== 执行时间: $(date) ==="
echo "当前执行用户: $(whoami)"
# 执行原命令
/usr/bin/sshpass -p "MY_PASSWORD" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null thomas@10.1.1.219 "/usr/bin/python3 /home/thomas/anydir/grkrt/pshvr.py"
# 打印命令返回码,0为正常,非0代表执行失败
echo "命令返回码: $?"

执行以下命令给日志文件赋权,避免gammu用户无写入权限:

sudo chmod 777 /tmp/gammu_smsd_run.log

可选优化:替换sshpass为SSH密钥对(更安全稳定)

明文存储密码存在安全风险,可配置密钥登录彻底避免sshpass相关问题:

  1. 给gammu用户生成SSH密钥对,执行后一路回车无需设置密码:
sudo -u gammu ssh-keygen
  1. 把公钥上传到远端Ubuntu的thomas用户授权列表,执行后输入一次thomas的密码即可:
sudo -u gammu ssh-copy-id thomas@10.1.1.219
  1. 修改run.sh命令,去掉sshpass即可正常执行:
#!/bin/sh
ssh thomas@10.1.1.219 "/usr/bin/python3 /home/thomas/anydir/grkrt/pshvr.py"

内容的提问来源于stack exchange,提问作者t.jirku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:39:02