我有同样的问题this https://stackoverflow.com/questions/9089350/rsync-via-php-exec-with-ssh-passwordless-ssh-login问题。如果我再解释一遍,我可以使用 rsync 将本地数据与服务器同步,无需密码(我使用 SSH 密钥)。但是当我在 PHP 中使用 exec() 函数时,它不起作用。
提出上述问题的人已经给出了自己的答案。他说这可以通过允许 Apache 用户帐户无密码访问服务器来完成。所以我的问题是如何提供 Apache 用户帐户对服务器的无密码访问?
我的 PHP 代码是:
echo exec('rsync -aze --progress --size-only /var/tmp/src/File01 [email protected] /cdn-cgi/l/email-protection:/var/tmp/dest/File01');
PS:我使用典型的用户帐户登录到我的机器(假设用户名是'bob'),并使用生成 ssh 密钥ssh-keygen -t rsa
. Then bob可以无密码访问服务器。
但是,当我运行 PHP 命令时,它在 Apache 下运行mod_php
通常 Apache 作为自己的用户帐户运行,独立于使用服务器的现实世界的人。因此,我生成的密钥不可用于 Apache 内的 PHP。
因此我尝试以 Apache 用户身份登录(我认为这是www-data)。但大多数文章都说www-data默认没有密码,无法登录www-data.
问题是 Apache 用户无法访问我的密钥。因此我必须为 Apache 用户生成 SSH 密钥(它是 www-data),尽管它不是那么安全。首先以 root 身份登录。
mkdir /var/www/.ssh
chown -R www-data:www-data /var/www/.ssh
现在生成 SSH 密钥,如下所示。它将保存您的私钥和公钥/var/www/.ssh
folder:
sudo -u www-data ssh-keygen -t rsa
现在你应该得到这样的东西:
root@sampath-Vostro-1520:/var/www/.ssh# sudo -u www-data ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/www/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/www/.ssh/id_rsa.
Your public key has been saved in /var/www/.ssh/id_rsa.pub.
The key fingerprint is:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx www-data@machine-Vostro-1520
The key's randomart image is:
+--[ RSA 2048]----+
| ...o...o..|
| o.. o|
| + .. .+o|
| . .*o+o|
| ++ S ..B..|
| o . E + |
| . . o o |
| . . |
| |
+-----------------+
现在将您的公钥复制到远程服务器:
sudo -u www-data ssh-copy-id -i /var/www/.ssh/id_rsa.pub [email protected] /cdn-cgi/l/email-protection
现在这应该可以了。 :-)
<?php
$c='rsync -azv /source/folder/path/ [email protected] /cdn-cgi/l/email-protection:/destination/folder/path';
exec($c,$data);
print_r($data);
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)