私は 3 年前にその質問に答えましたが、今でも同じ答えを返します。
SFTP サーバーがパスワード認証と公開鍵認証の両方を使用することはまれです。私の推測では、パスワードで保護された秘密鍵を持っている可能性が最も高いと思います。その場合、次のようにログインできます。
<?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 年前の投稿を確認すると、問題があったように見えますが、これらの問題は現在修正されているはずです。問題なく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());