Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可以从shell执行scp,不能从apache执行scp_Php_Apache_Shell_Lamp - Fatal编程技术网

Php 可以从shell执行scp,不能从apache执行scp

Php 可以从shell执行scp,不能从apache执行scp,php,apache,shell,lamp,Php,Apache,Shell,Lamp,我有一个带有php脚本的LAMP数据库,该脚本将图像从服务器复制到本地服务器。当我通过浏览器运行脚本时,它会创建目录,但不会将图像复制到文件夹中。脚本运行时会将命令发布(回显)到浏览器,例如: scp -i /home/jim/.ssh/id_rsa root@192.168.0.120:/images/55036249 /056-0039.* "/home/jim/images/_Retrieve/CARL EVANSON/2010-03-20 55036249-056-0039.jpg"

我有一个带有php脚本的LAMP数据库,该脚本将图像从服务器复制到本地服务器。当我通过浏览器运行脚本时,它会创建目录,但不会将图像复制到文件夹中。脚本运行时会将命令发布(回显)到浏览器,例如:

scp -i /home/jim/.ssh/id_rsa root@192.168.0.120:/images/55036249
/056-0039.* "/home/jim/images/_Retrieve/CARL EVANSON/2010-03-20 
55036249-056-0039.jpg"  
当我从一个shell运行上面的程序时,它工作了,它复制了图像

以下是脚本:

$foo = sprintf("mkdir \"/home/jim/images/_Retrieve/%s\"",$name);
system($foo);
$foo = sprintf("scp -i /home/jim/.ssh/id_rsa root@192.168.0.120:/images
/%s/%03d-%04d.* \"/home/jim/images/_Retrieve/%s/%s
%s-%03d-%04d.jpg\"",$jid,$card,$image,$name,$date,$jid,$card,$image);
该脚本似乎输出了正确的命令,因为当我在shell中运行它时,它会工作。当我在浏览器中运行它时,它会创建文件夹,但不会复制图像。当我查看httpd/error_日志时,它显示“主机密钥验证失败”

为什么当我通过浏览器运行它时它不工作


提前感谢。

您是否检查了文件夹和图像的权限,以查看它们是否可以从Apache访问?活动用户与您的登录名不同。在命令行上,它与您一样运行SCP(运行whoami以查看您是谁,以防您不确定)。在web浏览器中,它作为apache运行。apache是否具有登录到远程服务器的.ssh密钥?我怀疑它会的,凯瑙走对了。ssh密钥文件具有非常严格的权限,因此您的web服务器用户将无权读取您的密钥。是的,kainaw和glenn jackman的做法是正确的。结果证明,在root/.ssh/known_hosts文件中存在冲突条目。显然,服务器的一个迭代(它们是虚拟机)已经设置了密钥,这就是httpd/错误日志报告“主机密钥验证失败”的原因。