Учетная запись пользователя Apache без пароля для доступа к серверу - Ubuntu


У меня та же проблема, что и в этом вопросе. Если я объясню это еще раз, я смогу использовать rsync для синхронизации своих локальных данных с сервером без пароля (я использовал ключи SSH). Но когда я использую функцию exec() в PHP, она не работает.

Человек, задавший вышеуказанный вопрос, дал ответ сам. Он говорит, что это можно сделать, разрешив учетной записи пользователя Apache доступ к сервису без пароля. Поэтому мой вопрос заключается в том, как мне предоставить учетную запись пользователя Apache без пароля доступ к серверу?

Мой PHP-код:

echo exec('rsync -aze  --progress --size-only /var/tmp/src/File01 [email protected]:/var/tmp/dest/File01');

PS: Я вошел в свою машину, используя свою обычную учетную запись пользователя (допустим, имя пользователя "боб"), и сгенерировал ключи ssh с помощью ssh-keygen -t rsa. Затем боб имеет доступ к серверу без пароля.

Но, когда я запускаю команду PHP, она запускается в Apache под mod_php, и обычно Apache работает как собственная учетная запись пользователя, независимая от реальных людей, которые используют сервер. Поэтому мои сгенерированные ключи недоступны для PHP внутри Apache.

Поэтому я попытался войти в систему как пользователь Apache (я думаю, что это www-данные). Но в большинстве статей говорится, что www-данные по умолчанию не имеют пароля и не могут войти в систему как www-данные.

Спасибо.

Author: Community, 2013-10-31

2 answers

Хорошо. Наконец-то нашел решение. Спасибо всем, кто помог мне в этом.

Проблема заключалась в том, что пользователь apache не может получить доступ к моим ключам. Поэтому мне пришлось сгенерировать ssh-ключи для пользователя apache (это www-данные), хотя это было не так безопасно. Сначала войдите в систему как пользователь 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 [email protected]

Теперь это должно сработать. :-)

<?php
$c='rsync -azv /source/folder/path/ [email protected]:/destination/folder/path';
exec($c,$data);
print_r($data);
?>

Надеюсь, что это будет полезно. Спасибо Всем.

 5
Author: S.Basnagoda, 2013-11-01 14:14:27

Обычно ваш ключ загружается через SSH-агент, что делает его автоматически доступным, вместо этого вы можете вручную указать идентификационный файл. Если вы создадите ключ для использования, если он доступен для чтения apache, его можно использовать.

Rsync не позволяет вам напрямую указывать идентификационный файл, но вы можете передать параметры базовому вызову SSH:

echo exec('rsync -az -e "ssh -i /var/www/key.pri" --progress --size-only /var/tmp/src/File01 [email protected]:/var/tmp/dest/File01');
 1
Author: Pollett, 2013-10-31 17:28:07