Я answered that question три года назад, и я до сих пор дать тот же ответ ,
Довольно редко, что SFTP-серверы используют как пароль, так и publicickey . Мое предположение было бы то, что вы, скорее всего, имеете защищенный паролем секретный ключ. Если так что вы можете войти в систему таким образом:
<?php
include('Net/SFTP.php');
include('Crypt/RSA.php');
$sftp = new Net_SFTP('www.domain.tld');
$key = new Crypt_RSA();
$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));
if (!$sftp->login('username', $key)) {
exit('Login Failed');
}
print_r($sftp->nlist());
?>
Если действительно ваш сервер действительно делает, как должно работать:
<?php
include('Net/SFTP.php');
include('Crypt/RSA.php');
$sftp = new Net_SFTP('www.domain.tld');
$key = new Crypt_RSA();
$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));
if (!$sftp->login('username', $key) && !$sftp->login('username', 'password')) {
exit('Login Failed');
}
print_r($sftp->nlist());
?>
Обратите внимание, что это для версии 1.0. Если вы используете версию 2.0, код нужно будет немного изменить. Поскольку вы не разместили свой собственный код, невозможно узнать, какую версию вы используете.
Кроме того, при рассмотрении этого 3,5-летнего поста ... похоже, что есть проблемы, но эти проблемы теперь должны быть исправлены. Я сделал многофакторный auth сам с phpseclib без проблем. У вас есть основания полагать, что это не сработает?
редактировать: для 2.0 вы должны были бы сделать это:
Для 2,0 вам нужно сделать, это:
$sftp = new SFTP('www.domain.tld');
$key = new RSA();
//$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));
if (!$sftp->login('username', $key) && !$sftp->login('username', 'password')) {
exit('Login Failed');
}
print_r($sftp->nlist());
Это аутентификация с паролем и ключом. Я знаю, что они используют метод аутентификации «publickey, password». И тот факт, что я тот, кто на самом деле создал ключ. Это ключ без пароля. Я проверил/реплицировал проблему в библиотеке, изменив свой личный сервер, чтобы использовать «publickey, password» – guice
Кроме того: с использованием «лиги/flysystem-sftp»: «~ 1.0-stable», в которой используется «phpseclib/phpseclib», : "~ 2.0". – guice
@ guice666 - idk too much о лиге/flysystem-sftp, но я ничего не обновил свой пост, чтобы показать, как вы это сделаете с помощью phpseclib 2.0. – neubert