我的情况类似于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调用也可以正常工作。
答案 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
变量的值。