通过Web服务器执行rsync bash脚本无法正常工作

时间:2018-01-12 02:28:15

标签: php linux bash cgi-bin

我有一个简单的web php脚本,可以触发bash脚本

<?php
 if(isset($_POST['submit']))
 {
   $output=shell_exec('sh /usr/lib/cgi-bin/script.sh');
   echo $output;
 }
?>

<form action="" method="post">
<input type="submit" name="submit" value="Call my Shell Script">
</form>

我在脚本中尝试了简单的命令,如重命名和触摸,它似乎工作正常。

设置rsa密钥,rsync在终端上运行,但我得到以下内容:

Host key verification failed.^M
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
Could not create directory '/var/www/.ssh'.^M
Host key verification failed.^M
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]

剧本内容:

rsync -azv -e 'ssh -p 2222' /home/downloads/ user@ip:/home/downloads

我可能错了,但这似乎是一个许可问题?

1 个答案:

答案 0 :(得分:1)

您的问题来自&#34;主机密钥验证失败&#34;。

脚本与您的www用户(apache,www-data,...)一起执行。 在/ etc / passwd中,您可能已将该用户的主目录定义为/ var / www。

如果该用户在该目录中没有该权限,则无法创建.ssh文件夹来存储远程计算机的主机密钥。

因此,您可以手动创建文件夹:

sudo mkdir /var/www/.ssh
sudo chmod 600 /var/www/.ssh
sudo chown <your-www-user> .ssh

这是第一步,但rsync仍然会失败,因为您必须接受远程主机密钥。

所以,第二步是从SSH连接到远程主机获取远程主机密钥

su - <your-www-user>
ssh -p 2222 user@ip

第三个问题,登录。您应为每个密钥配置一个SSH连接,以避免在每个连接上键入密码(无论哪种方式,您的rsync都将失败)。

所以,要生成ssh密钥:

su - <your-www-user>
ssh-keygen -t rsa

将ssh公钥复制到远程主机:

su - <your-www-user>    
ssh-copy-id user@ip

这应该可以解决问题。