自动脚本调用时 SSH 不起作用

自动脚本调用时 SSH 不起作用

概括:我的包含 ssh 的脚本在命令行中运行良好,但是当自动守护进程(apcupsd)调用该脚本时,ssh 部分不起作用。

细节:我有一台 ESXi 服务器,上面有一个 CentOS 6.5 VM,专门用于监控 APC 备用 UPS(通过 USB)。我使用 APCUPSD 来执行此操作。理论上,如果长时间断电,它会通过 ssh 进入 ESXi 主机以关闭系统。在与 UPS 的连接、检测电源故障等方面,一切都正常,并且在需要关机时调用脚本(在 CentOS VM 上)。

我已经使用 ssh-keygen 等设置了密钥,因此我可以通过 ssh 进入 ESXi 主机而不需要密码。

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

但当 apcupsd 自动调用时则不然。

具体来说,ssh 命令不起作用(我的脚本中的其他行运行正常)。

我尝试将我正在运行的命令更改为简单的 ls,并将输出重定向到文件(再次从命令行手动运行时,这可以正常工作)。

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

我尝试过 SSH 的多种不同选项,包括 -i 和 -n。我似乎无法获得任何详细的错误消息(例如使用 -v)

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

我尝试过以下方法:

/usr/bin/ssh -o StrictHostKeyChecking=no -x [email protected] "ls" >output_file
/usr/bin/ssh -n -i /root/.ssh/id)dsa [email protected] "ls" >output_file
ssh -n [email protected] >output_file

如果我echo $? >output_file收到返回代码 126,我认为这是 CLI_ERR_NOT_AUTHORIZED 授权错误:用户没有足够的权限来执行命令。问题是我相信 apcupsd 将以 root 身份运行,所以我认为它具有必要的权限。

有人可以帮忙吗?

答案1

检查 /var/log/messages 中是否有“apcupsd:无法获取伪终端:权限被拒绝”之类的消息。如果您看到这些消息,则可能是 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 会话。

相关内容