通过exec的PHP SSH连接在从命令行调用时有效,但不能通过apache调用

时间:2012-10-22 08:20:28

标签: php ssh exec

我的情况类似于PHP shell_exec running a shellscript with ssh但不一样。

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

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

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

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

所以目前我并不理解为什么它不起作用。我试图找出关于retval 255的更多细节,但没有走得太远。

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

1 个答案:

答案 0 :(得分:2)

通用

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

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

并检查$retval

更新

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

如果使用主机名连接,也可能由于DHCP或不同的VPN隧道已经更改而IP已更改,并且这不是您正在寻找的主机。

在SSH的情况下,可以使用-vvv非常猛烈的详细选项执行它,然后解析输出的千字节搜索known_hosts文件的来源。它对于shell_exec诊断命令(例如

)也很有用
$ret = shell_exec('set');

查看HOME变量的值。