繁体   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