SSH在自动脚本调用时不工作

概要 :包含ssh的脚本在命令行中运行良好,但ssh部分在脚本被自动守护程序(apcupsd)调用时不起作用。

细节 :我有一个ESXi服务器,我有一个CentOS 6.5虚拟机,专门用于监控APC Backup UPS(通过USB)。 我正在使用APCUPSD来做到这一点。 理论上说,如果发生延迟断电,它将进入ESXi主机closures系统。 一切工作在连接到UPS和检测电源故障等方面,并在关机时调用脚本(在CentOS虚拟机上)。

我使用ssh-keygen等设置了密钥,因此我可以在不需要密码的情况下进入ESXi主机。

如果我从命令行手动运行脚本,它工作正常。

但是它不会在apcupsd自动调用。

特别是它是不工作的ssh命令(我的脚本中的其他行运行良好)。

我试着改变命令我正在运行一个简单的LS和redirect输出到一个文件(再次这个工作正常,当从命令行手动运行)。

当自动触发我的输出文件被创build,但它是零字节。

我已经尝试了许多不同的SSH选项,包括-i和-n。 我似乎无法得到任何详细的错误信息(例如与-v)

查看ESXi主机上的/var/log/auth.log,表明它甚至没有尝试build立连接。

我已经尝试了几件事情:

/usr/bin/ssh -o StrictHostKeyChecking=no -x root@XXXX "ls" >output_file /usr/bin/ssh -n -i /root/.ssh/id)dsa root@XXXX "ls" >output_file ssh -n root@XXXX >output_file 

如果我echo $? >output_file echo $? >output_file我得到一个126的返回码,我相信是CLI_ERR_NOT_AUTHORIZED授权错误:用户没有足够的权限来执行命令。 事情是我相信apcupsd将作为根运行,所以我会认为它会有必要的权限。

任何人都可以帮忙吗?

检查/ var / log / messages消息,如“apcupsd:无法获得伪terminal:权限被拒绝”。 如果你看到这些,可能是SELINUX阻止你。 尝试“setenforce 0”临时禁用SELINUX,看看它是否工作。 如果解决了这个问题,您应该在/var/log/audit/audit.log中看到拒绝错误。

运行“sudo yum install policycoreutils-python”。 然后运行“grep apcupsd /var/log/audit/audit.log | audit2allow -M mypol”和“semodule -i mypol.pp”以允许apcupsd执行SSH会话。