Выполнение rsync через bash-скрипт веб-сервера не работает

У меня есть простой веб-скрипт php, который запускает скрипт bash

<?php
if(isset($_POST['submit']))
{
$output=shell_exec('sh /usr/lib/cgi-bin/script.sh');
echo $output;
}
?>

<form action="" method="post">
<input type="submit" name="submit" value="Call my Shell Script">
</form>

Я пробовал в скрипте простые команды, такие как переименование и касание, и это, казалось, работало нормально

Ключи rsa настроены, и rsync работает с терминала, но я получаю следующее:

Host key verification failed.^M
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
Could not create directory '/var/www/.ssh'.^M
Host key verification failed.^M
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]

Содержание сценария:

rsync -azv -e 'ssh -p 2222' /home/downloads/ user@ip:/home/downloads

Я могу ошибаться, но это, похоже, проблема с разрешением?

0

Решение

Ваша проблема связана с «Ошибка проверки ключа хоста».

Сценарий выполняется с вашим пользователем www (apache, www-data, …).
В вашем / etc / passwd вы, вероятно, определили домашний каталог этого пользователя для / var / www.

Если этот пользователь не имеет разрешения в этом каталоге, он не может создать папку .ssh хранить ключ хоста удаленного компьютера.

Итак, вы можете вручную создать папку:

sudo mkdir /var/www/.ssh
sudo chmod 600 /var/www/.ssh
sudo chown <your-www-user> .ssh

Это первый шаг, но rsync все равно потерпит неудачу, потому что вам нужно принять ключ удаленного хоста.

Итак, второй шаг — подключиться с помощью SSH к удаленному хосту. получить ключ удаленного хоста :

su - <your-www-user>
ssh -p 2222 user@ip

Третья проблема, логин. вам следует настроить SSH-соединение для каждого ключа чтобы избежать необходимости вводить пароль при каждом подключении (в любом случае ваш rsync не будет работать).

Итак, чтобы сгенерировать ключ ssh:

su - <your-www-user>
ssh-keygen -t rsa

Скопируйте ваш открытый ключ ssh на удаленный хост:

su - <your-www-user>
ssh-copy-id user@ip

Это должно делать свое дело.

1

Другие решения

Других решений пока нет …