Apache用户帐户无密码访问服务器- Ubuntu

eaf3rand  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(183)

我有同样的问题,这是在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 登录。

  • 谢谢-谢谢
yduiuuwa

yduiuuwa1#

问题是Apache用户无法访问我的密钥。因此我不得不为Apache用户生成SSH密钥(它是www-data),尽管它不是那么安全。首先以root身份登录。

mkdir /var/www/.ssh
chown -R www-data:www-data /var/www/.ssh

现在生成SSH密钥,如下所示。它会将您的私钥和公钥保存在/var/www/.ssh文件夹中:

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 username@myserver.com

现在这个应该可以用了。:-)

<?php
$c='rsync -azv /source/folder/path/ username@myserver.com:/destination/folder/path';
exec($c,$data);
print_r($data);
?>
h79rfbju

h79rfbju2#

通常你的密钥是通过SSH代理自动加载的,你也可以手动指定一个标识文件来代替它。如果你生成了一个密钥,只要它是apache可读的,就可以使用它。
Rsync不允许您直接指定标识文件,但您可以将参数传递给底层SSH调用:

echo exec('rsync -az -e "ssh -i /var/www/key.pri" --progress --size-only /var/tmp/src/File01 serveruser@mycloud.com.lk:/var/tmp/dest/File01');

相关问题