Доступ к серверу без доступа к серверу Apache – Ubuntu

У меня та же проблема, что и в этом вопросе. Если я объясню это снова, я могу использовать 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-keygen -t rsa . Затем bob имеет доступ к серверу без пароля.

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

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

Спасибо.

Related of "Доступ к серверу без доступа к серверу Apache – Ubuntu"

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

Проблема заключалась в том, что пользователь apache не может получить доступ к моим ключам. Поэтому мне пришлось генерировать ssh-ключи для пользователя apache (это 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 + | | . . oo | | . . | | | +-----------------+ 

Теперь скопируйте свой открытый ключ на удаленный сервер.

 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); ?> 

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

Обычно ваш ключ загружается через 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');