Добавление ключевого файла в аутентификацию PHP cURL - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь загрузить файл на сервер резервного копирования с помощью PHP & cURL и аутентификации по ключевому файлу.Я создал пару открытых и закрытых ключей и сохранил открытый на резервном сервере.Закрытый ключ, который я загрузил на веб-сервер в файле с именем «private_key.txt».Вход в систему работает отлично, когда я загружаю файл закрытого ключа в filezilla для аутентификации, поэтому сервер резервного копирования должен быть настроен правильно.В PHP cURL я получаю сообщение «Ошибка аутентификации».

Вот мой сценарий:

$certpath = $_SERVER['DOCUMENT_ROOT'].'private_key.txt';
$curl = curl_init();
$fp = fopen('testfile_ORIG', 'r');

curl_setopt($curl, CURLOPT_URL,"sftp://server.com/is/htdocs/testfile_MOVED");
curl_setopt($curl, CURLOPT_USERNAME, 'user');   
curl_setopt($curl, CURLOPT_SSLKEY, $certpath);
curl_setopt($curl, CURLOPT_SSLENGINE, 'ssh-rsa');   
curl_setopt($curl, CURLOPT_UPLOAD, 1);      
curl_setopt($curl, CURLOPT_INFILE, $fp);

curl_exec ($curl);
echo curl_error($curl);
curl_close ($curl);

Кто-нибудь видит мою ошибку?Я пробовал с разными настройками в течение 2 дней, но не заработал.Спасибо за все подсказки

1 Ответ

0 голосов
/ 10 октября 2018

ваш код никогда не проверяет, не завершаются ли ваши вызовы curl_setopt, исправьте это, и ошибка должна стать понятной.может быть что-то вроде

function ecurl_setopt ( /*resource*/$ch , int $option , /*mixed*/ $value ):bool{
    $ret=curl_setopt($ch,$option,$value);
    if($ret!==true){
        //option should be obvious by stack trace
        throw new RuntimeException ( 'curl_setopt() failed. curl_errno: ' . return_var_dump ( curl_errno ($ch) ).'. curl_error: '.curl_error($ch) );
    }
    return true;
}
  • , которое выдает исключение вместо возврата bool (false) в случае сбоя curl_setopt.

Ваша настоящая проблема здесь (вероятно) в том, что вы предполагаете, что $ _SERVER ['DOCUMENT_ROOT'] заканчивается на разделитель каталогов (/ в mac / linux / bsd / etcсистем, \ в системах Windows), это неверно, это не так, допустим, ваш корень www имеет значение /srv/http/default/www, а ваш файл закрытого ключа /srv/http/default/www/private_key.txt, ваш код попытается получить доступ к файлу с именем wwwprivate_key.txt в папке /srv/http/default, вместо попытки доступа к файлу с именем private_key.txt в папке /srv/http/default/www - решение:

$certpath = $_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.'private_key.txt';

(константа DIRECTORY_SEPARATOR равна 1 из php'sглобальные константы , для Windows она установлена ​​на \ и везде /. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...