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相关问题:
- 给gammu用户生成SSH密钥对,执行后一路回车无需设置密码:
sudo -u gammu ssh-keygen
- 把公钥上传到远端Ubuntu的thomas用户授权列表,执行后输入一次thomas的密码即可:
sudo -u gammu ssh-copy-id thomas@10.1.1.219
- 修改run.sh命令,去掉sshpass即可正常执行:
#!/bin/sh ssh thomas@10.1.1.219 "/usr/bin/python3 /home/thomas/anydir/grkrt/pshvr.py"
内容的提问来源于stack exchange,提问作者t.jirku
相关产品推荐
相关产品推荐

