簡體   English   中英

帶有私有RSA密鑰登錄失敗的phpseclib 2.0.12 SFTP

[英]phpseclib 2.0.12 SFTP with private RSA key login failure

我使用phpseclib通過RSA私鑰登錄到SFTP服務器。 我正在從PHP 5.3上的phpseclib 1.0升級到PHP 7.2上的phpseclib 2.0.12。 PHP5上的舊代碼可以正常工作,但是升級版無法登錄,從而導致以下錯誤消息:1024連接在3939行的SSH2.php中過早關閉。這是兩個不同的版本:

PHP5.3代碼上的舊phpseclib1.0(有效):

$key = new Crypt_RSA();
$key->loadKey(file_get_contents('rsaprivate.key'));
$sftp = new Net_SFTP('urltosftpserver');
$sftp->login('username', $key)

PHP7.2代碼上的新phpseclib 2.0.12(失敗):

$key = new phpseclib\Crypt\RSA();
$key->loadKey(file_get_contents(__DIR__.'/rsaprivate.key'));
$sftp = new phpseclib\Net\SFTP('urltosftpserver');
$sftp->_privatekey_login("username", $key);

當我查看$ key的值時,它們在我的代碼的兩個不同版本中不匹配。 phpseclib1.0創建值的整數,而phpseclib2.0創建十六進制數。 當我將pubseclib 2.0十六進制數字轉換為整數時,它們與pubseclib 1.0創建的整數不匹配。 但是我不確定這是否與我的問題有關。

從pubseclib1.0的SNIPPLET var_dump($ key):

[value] => 42318...
[is_negative] => 
[generator] => mt_rand
[precision] => -1
[bitmask] => 
[hex] => 

從pubseclib2.0的SNIPPLET var_dump($ key):

[value] => 0x60f23...
[engine] => bcmath (OpenSSL)

我不知道是導致問題的RSA密鑰還是_privatekey_login方法。

簡短答案

從您的2.0代碼中:

$sftp->_privatekey_login("username", $key);

不要那樣做 做這個:

$sftp->login("username", $key);

長答案

login調用_login ,后者調用_connect_login_helper _connect是調用fsockopen地方。 _login_hepler然后有條件地調用_privatekey_login 通過直接調用_privatekey_login ,您可以繞過phpseclib通常執行的所有步驟。

該文檔沒有告訴您執行此操作。 您甚至可以了解該方法的唯一方法是查看源代碼。 根據_privatekey_login上方的PHPDoc注釋,很明顯,該方法旨在用作私有方法,但您仍在調用它。 實際上,它的可比方法在master分支中是私有的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM