用于远程传输文件的linux命令和shell脚本

时间:2011-12-22 07:40:47

标签: shell

我在本地服务器和远程服务器之间设置了passpahse

我直接在linux中尝试此命令(其中file是单个文件,$ remote是远程服务器)

  

scp $ file root @ $ remote:/ tmp /

工作正常

我尝试在shell脚本中编写命令并在linux上调用它,它也可以工作

但如果我尝试从php调用shell脚本,它只输出错误(来自我的日志记录)

  

无法创建目录'/var/www/.ssh'。

     

主机密钥验证失败。

怎么回事?

4 个答案:

答案 0 :(得分:1)

你的php没有像你一样运行,或者至少有一个更改的root,因此它将其主页视为/ var / www /,其中不包含.ssh文件夹(以及所需文件)。

如果在/ var / www中添加.ssh,请确保.ssh由php运行的用户拥有,并且文件具有正确的属性(谁可以读/写文件)。

答案 1 :(得分:1)

首先在您的脚本中尝试:

whoami

如果用户为www-data,请在/var/www中创建目录.ssh。然后将此目录/var/www/.ssh提供给用户的所有者和组,您的PHP运行。

对我来说(Perl-Script)这个效果很好,虽然在启动我的脚本(sFTP)后目录中没有任何内容。

答案 2 :(得分:0)

您的普通用户帐户存储了ssh密钥(默认情况下,它们存储在$HOME/.ssh中),而不是Web服务器用户,这就是在shell中使用它而不是从浏览器中运行命令时运行正常的原因。浏览器进程尝试在其主目录中创建.ssh目录,但未能这样做,因此无法继续。

您应该使用ssh2_scp_send从PHP执行此操作。

答案 3 :(得分:0)

/var/www中创建一个虚拟目录,然后运行mkdir /var/www/.sshchown -R www-data:www-data /var/www/.ssh

这应该可以解决您的问题。 shell_exec('/usr/bin/scp $file root@$remote:/tmp/')