Вот способ сделать это без SCP.
IMO - более простой / безопасный и своевременный подход - при условии, что у вас есть доступ к целевому серверу и вы можете добавить туда некоторый код, который работает под соответствующим веб-сервером - это использовать некоторый код curl php на «клиенте» (сервер 2 - drupal) и некоторый php-код на «сервере» (server 1 - elearning), чтобы получить файл и сохранить его соответствующим образом.
Вам следует проверить документацию PHP по загрузке файлов через POST:
http://www.php.net/manual/en/features.file-upload.post-method.php
Также проверьте curl_setopt (), особенно " Пример # 2 Загрузка файла ":
http://www.php.net/manual/en/function.curl-setopt.php
Таким образом, каждый раз, когда какое-либо событие по вашему выбору происходит на drupal-server2, вы запускаете код, который загружает файл в скрипт php - что-то вроде этого:
$remote_url = "http://elearning.server1.com/upload.php";
$data = array('file' => '@'. $uploadfile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$ce = curl_exec($ch);
curl_close($ch);
Трудной частью выше может быть перехват события загрузки в Drupal и доступ к информации файла загрузки. В качестве альтернативы вы можете открыть и прочитать файл, который я здесь не рассматриваю.
На elearning-server1 ваш код получения, например, http://elearning.server1.com/upload.php должно выглядеть так:
$uploaddir = '/var/www/elearning/drupal_file_uploads/';
$basename = basename($_FILES['file']['name']);
$uploadfile = $uploaddir . $basename;
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
После завершения передачи файла вы можете сохранить исходный файл на сервере drupal или удалить его (или выполнить проверку работоспособности, такую как сравнение хешей md5 перед удалением).
Вы можете дополнительно защитить код на elearning-server1 с помощью настроек apache (разрешить доступ к этому сценарию только с IP-адреса вашего сервера drupal), использовать HTTPS / SSL и использовать выбранную вами парольную фразу из одного сценария в другой. ,
Я не уверен, достаточно ли это безопасно для вашего ИТ-отдела - но он уважает дух запроса вашего ИТ-отдела - они увидят, что вы уважаете их ответ, и вы можете даже получить некоторую доброжелательность и повысить доверие в ответ.
Прежде чем кто-либо использует ssh / scp в скрипте php - вы должны спросить себя, есть ли более простой способ сделать то, что вам нужно? Вы используете базуку, чтобы убить комара?
Настройка доступа SSH / SCP, даже с аутентификацией по ключу, по-прежнему создает много уязвимостей, о которых упоминали другие выше. Кроме того, теперь у этого соединения есть потенциал для того, чтобы разрушить его, основываясь на его разрешениях на этом конечном сервере. Зачем рисковать, если вам это не нужно?
Задание Rsync cron безопасно, но оно вводит задержку до его запуска - что может или не может быть приемлемо для вас.