使用php

时间:2016-09-16 17:14:16

标签: php linux ssh rsync

我尝试使用PHP执行命令(rsync)将文件夹和文件从远程服务器复制到本地文件夹。

这是我在php中编写的代码。 SSH中的命令工作(本地终端和带putty.exe的远程),正确复制文件夹和文件。

但它在PHP中不起作用。我能做什么?你知道更好(安全/最佳)的方法吗?

exec("echo superuserpassword | sudo -S sshpass -p 'sshremoteserverpassword' rsync -rvogp --chmod=ugo=rwX --chown=ftpuser:ftpuser -e ssh remoteserveruser@remoteserver.com:/path/files/folder /opt/lampp/htdocs/dowloadedfiles/", $output, $exit_code);

修改 我已阅读此guide以在我的服务器和本地计算机之间创建链接。

现在我可以在没有密码的远程计算机上使用ssh登录。

我改变了命令:

 rsync -crahvP --chmod=ugo=rwX --chown=ftpuser:ftpuser remote.com:/path/to/remote/files /path/to/local/files/

此命令在终端中也有效,但是当我用exec php命令发送它时,它再次失败,但是我又得到了另一个错误:127。

正如MarcoS在回答中所说,我检查了error_log。

消息是这样的:

ssh: relocation error: ssh: symbol EVP_des_cbc, version OPENSSL_1.0.0 not defined in file libcrypto.so.1.0.0 with link time reference
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.1]

2 个答案:

答案 0 :(得分:1)

我想你遇到了身份问题 ......: - )

在cli上,您以登录用户身份运行命令 在PHP上,您以运行Web服务器的用户身份运行命令(例如,apache通常以www-dataapache用户运行...)。

我看到的一个可能的解决方案(如果以上是问题的真正原因),就是将您的用户添加到Web服务器组......

我还建议您检查网络服务器错误日志,以确定问题的真正原因......: - )

答案 1 :(得分:1)

好吧,经过多次尝试/错误后,我完成了在root中解决问题:

我引用了这个guide(就像最后一个,但更好地解释了)并且我将执行rsync命令的php文件更改为远程服务器(文件所在的位置)并在那里运行rsync.php文件,它运作得很好。

使用文件(要复制的文件和rsync.php)在机器中执行

1.- ssh-keygen生成密钥

ssh-keygen

输入空密码并再次重复空密码。

2.- ssh-copy-id将公钥复制到远程主机

ssh-copy-id -i ~/.ssh/id_rsa.pub remoteserveraddressip(xxx.xxx.xxx.xxx)

rsync.php文件:

exec("rsync -crahvP /path/in/local/files/foldertocopy remoteuser@remoteserveraddress:/path/in/remote/destinationfolder/", $output, $exit_code);

完成所有这些后,导航到rsync.php文件,所有文件都必须正常工作。至少为我工作......