0

我的情况类似于PHP shell_exec 使用 ssh 运行 shellscript但不一样。

情况:我在两台服务器之间交换了 ssh 密钥,切换到www-data用户并通过 SSH 连接到第二台服务器,无需密码。

测试 1: ssh user@10.8.0.6 Documents/run.sh list 在 shell 中执行时工作正常

测试 2:将一个简单的 PHP Exec 放入 PHP 文件中可以正常工作。它返回一个数组,Retval 为 0

测试 3:将 exec 放入“大”PHP 脚本并调用它会导致 Retval 255(致命错误?!?!?)

所以目前我真的不明白为什么它不起作用。我试图找出有关 retval 255 的更多细节,但没有走多远。

差异必须在 PHP5 与 PHP5 cli 中的某个地方。但在我不得不使用 OpenVPN 之前,它也可以通过正常的 Apache 调用正常工作。

4

1 回答 1

3

通用的

问题的第一级诊断shell_exec是尝试通过生成添加 2>&1 的相同命令来获得更多信息错误,例如在您的情况下

$retval = shell_exec("/path/to/ssh ... 2>&1");

和检查$retval

更新

“主机密钥验证失败”意味着~/.ssh/known_hosts运行 Apache 的用户包含不同的密钥。检查文件中的主机名和 IP 密钥;在紧要关头,删除两者,以用户身份登录www-data并通过手动连接恢复密钥。

如果使用主机名连接,IP 也可能由于 DHCP 或不同的 VPN 隧道启动而发生更改,而这不是您要查找的主机。

在 SSH 的情况下,可以使用-vvv非常冗长的选项执行它,然后解析千字节的输出以搜索known_hosts文件源。它对诊断命令也很有用,shell_exec例如

$ret = shell_exec('set');

查看HOME变量的值。

于 2012-10-22T08:50:23.580 回答