1

二重要素認証 (秘密鍵とパスワード) で phpseclib / Flysystem/SFTP を最近使用した経験がある人はいますか?

昨日この問題に遭遇したばかりで、修正が必要です。検索結果は次のとおりです。

それは 3 年前のものですが、phpseclib はまだ修正されていないようです。

基本ライブラリを変更せずにこれを機能させる方法はありますか?

使用: "league/flysystem-sftp": "~1.0-stable"、"phpseclib/phpseclib": "~2.0" を使用

4

2 に答える 2

1

私は 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());
于 2016-08-29T15:44:38.053 に答える