【发布时间】:2012-10-12 00:38:16
【问题描述】:
我的情况与PHP shell_exec running a shellscript with ssh类似,但不一样。
情况:我在两台服务器之间交换了 ssh 密钥,切换到 www-data 用户并通过 SSH 连接到第二台服务器,无需密码。
测试一: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 调用正常工作。
【问题讨论】:
-
首先尝试通过使用
2>&1生成 SSH 来获取更多信息错误,例如$retval = shell_exec("/path/to/ssh ... 2>&1");,以便您可以检查$retval。这可能会告诉你一些简单的解决方法。否则我会尝试一个“诊断”的答案。 -
感谢提示,非常好:返回主机密钥验证失败。所以虽然它在命令行上与 www-data 一起工作,但主机验证在这里不起作用很奇怪......
-
Gern geschehen :-)。那是什么?
-
我重新检查了我将 www-data 的主目录更改为我创建 ssh 密钥 www-data:x:33:33:www-data:/home/www-data 的主文件夹:/bin/sh
-
我发现了一个类似的问题,所以如果它可以帮助其他人......我可以在命令行上 ssh,但不能从脚本运行。问题是当我登录到我正在执行 ssh 的机器 时,我打开了代理转发(在 Putty 中),所以我的证书有问题(这是我没有得到的)权限)没有出现,因为它使用了我的转发密钥。我必须关闭代理转发才能看到脚本可能也收到但未在输出中捕获的错误消息。