我有同样的问题,这是在this的问题。如果我再解释一下,我可以使用rsync同步我的本地数据与服务器没有密码(我使用SSH密钥)。但当我使用exec()函数在PHP中,它不工作。
问这个问题的人已经给出了自己的答案。他说可以通过允许Apache用户帐户无密码访问服务器来实现。所以我的问题是我如何提供Apache用户帐户无密码访问服务器?
我的PHP代码是:
echo exec('rsync -aze --progress --size-only /var/tmp/src/File01 serveruser@mycloud.com.lk:/var/tmp/dest/File01');
PS:我用我的典型用户帐户登录到我的机器(假设用户名是'bob'),并使用ssh-keygen -t rsa
生成ssh密钥。然后bob可以无密码访问服务器。
但是,当我运行PHP命令时,它在Apache中运行在mod_php
下,通常Apache是以自己的用户帐户运行的,独立于使用服务器的现实世界中的人。因此,我生成的密钥对Apache内部的PHP不可用。
所以我试着以Apache用户的身份登录(我想是 www-data),但大多数文章都说 www-data 默认没有密码,不能以 www-data 登录。
- 谢谢-谢谢
2条答案
按热度按时间yduiuuwa1#
问题是Apache用户无法访问我的密钥。因此我不得不为Apache用户生成SSH密钥(它是www-data),尽管它不是那么安全。首先以root身份登录。
现在生成SSH密钥,如下所示。它会将您的私钥和公钥保存在
/var/www/.ssh
文件夹中:现在,您应该得到如下所示的结果:
现在将公钥复制到远程服务器:
现在这个应该可以用了。:-)
h79rfbju2#
通常你的密钥是通过SSH代理自动加载的,你也可以手动指定一个标识文件来代替它。如果你生成了一个密钥,只要它是apache可读的,就可以使用它。
Rsync不允许您直接指定标识文件,但您可以将参数传递给底层SSH调用: