phpseclib соединение закрыто сервером? - PullRequest
0 голосов
/ 30 июня 2018

У меня есть довольно простой PHP-скрипт, который пытается подключиться к SFTP-серверу из коробки CENTOS 7. Использование phpseclib через composer.

<?php
require('vendor/autoload.php');
$usr = 'xx';
$pwd = 'xx';
$host = 'sftp.domain.com.au';

$sftp = new SFTP($host);

if($sftp->login($usr, $pwd)){
   echo "Connected.";
}else {
   echo "Failed";
}
?>

И даже использовал ключ RSA

<?php
require('vendor/autoload.php');
$usr = 'xx';
$pwd = 'xx';
$host = 'sftp.domain.com.au';

$sftp = new SFTP($host);
$rsa  = new RSA();
$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));
if($sftp->login($usr, $pwd, $rsa)){
   echo "Connected.";
}else {
   echo "Failed";
}
?>

Сценарий, описанный выше с RSA, действительно несколько раз работал и меня связал. Поэтому я подумал, что должен понять, почему это работает, и изменить несколько вещей. Я попытался сгенерировать другой ключ, перезаписывая существующий ключ. Но на этот раз это не сработало.

Я также включил NET_SFTP_LOGGING без каких-либо ошибок отображения, просто как «Соединение закрыто сервером». Я работал над этим в течение нескольких дней ..

Единственное, о чем я мог подумать, это когда я заново сгенерировал ключ и перезаписал ID_RSA, может быть, сервер подумал, что он больше не тот ключ?

Также, когда я подключаюсь с помощью WinSCP, кажется, что FTP-сервер дает мне алгоритм: ssh-rsa 4096, sha256 и md5 code. Это то, что мне нужно использовать в моем сценарии PHP для правильного подключения? Просто пытаюсь исключить любые возможности.

БОЛЬШЕ ДЕТАЛЕЙ:

  • с работы могу подключиться к FTP-серверу через FILEZILLA / WINSCP
  • сервер CENTOS box является частью нашей сети на работе.
  • Я не могу подключиться к FTP-серверу из дома.
  • в окне CENTOS, которое я включил, настроил «ssh_config» и сгенерировал ключи с помощью ssh-kegen -t RSA, я даже добавил id_rsa.pub к авторизованному ключу

Пожалуйста, кто-нибудь даст нам какой-нибудь совет, так как это потребляет меня на ДНИ, надеюсь, не на недели! Заранее спасибо.

1 Ответ

0 голосов
/ 30 июня 2018

Из вашего кода:

$rsa->loadKey("../../.ssh/id_rsa");

Попробуйте это:

$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));

Кроме того,

if($sftp->login($usr, $pwd, $rsa)){

Вы на самом деле хотите использовать многофакторную аутентификацию? По моему опыту настройки SSH-серверов для этого достаточно редки. Что более вероятно, так это то, что у вас есть защищенный паролем закрытый ключ RSA, после чего вы сделаете что-то похожее на это:

$rsa->setPassword($pwd);
$rsa->loadKey(file_get_contents("../../.ssh/id_rsa"));
...