S.B*_*oda 3 php apache ssh rsync
我在这个问题上有同样的问题.如果我再解释一下,我可以使用rsync将我的本地数据与服务器同步而无需密码(我使用SSH密钥).但是当我在PHP中使用exec()函数时,它不起作用.
问过上述问题的人自己给出了答案.他说,可以通过允许Apache用户帐户无密码访问服务来完成.所以我的问题是我如何提供Apache用户帐户无密码访问服务器?
我的PHP代码是:
echo exec('rsync -aze --progress --size-only /var/tmp/src/File01 serveruser@mycloud.com.lk:/var/tmp/dest/File01');
Run Code Online (Sandbox Code Playgroud)
PS:我使用我的典型用户帐户登录我的机器(假设用户名是' bob '),并使用生成的ssh密钥ssh-keygen -t rsa.然后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
Run Code Online (Sandbox Code Playgroud)
现在生成SSH密钥如下.它会将您的私钥和公钥保存在/var/www/.ssh文件夹中:
sudo -u www-data ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)
现在你应该得到这样的东西:
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 |
| . . |
| |
+-----------------+
Run Code Online (Sandbox Code Playgroud)
现在将您的公钥复制到远程服务器:
sudo -u www-data ssh-copy-id -i /var/www/.ssh/id_rsa.pub username@myserver.com
Run Code Online (Sandbox Code Playgroud)
现在这应该工作.:-)
<?php
$c='rsync -azv /source/folder/path/ username@myserver.com:/destination/folder/path';
exec($c,$data);
print_r($data);
?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3827 次 |
| 最近记录: |