我已经在数据库中存储了一些 pem 文件,我现在希望使用它来加载密钥,以便 ssh 到有问题的盒子中。但是,当我的代码到达 $key->load( $pub ); 时我的代码中出现错误。该代码以前是通过将键作为文件中的字符串来工作的,但更喜欢将它们放在数据库中,因为随着需要更多键,它会更容易维护。
我使用的是 phpseclib,因为 RSA 文件中没有 loadKeys 函数。当密钥粘贴到脚本中时,代码可以工作。我使用phpmyadmin直接将代码粘贴到数据库中。我的开发机器是 Win 10,但实际运行时它将位于内部 Linux 服务器上
$lightsail = new lightsail();
$pub = $lightsail->getPemByName();
$pub = str_replace("\r", '', $pub ); // Noticed key returned had \r\n so corrected it but still fails
$key = new RSA();
$key->load( $pub );
我看到的错误如下
( ! ) Fatal error: Uncaught Error: Call to a member function toBytes() on string in something\phpseclib\Crypt\RSA.php on line 724
( ! ) Error: Call to a member function toBytes() on string in something\phpseclib\Crypt\RSA.php on line 724
Call Stack
# Time Memory Function Location
1 0.2199 430880 {main}( ) ...\dequeue.php:0
2 40.8792 1169040 backup->backupDatabase( ) ...\dequeue.php:181
3 76.7275 2748016 phpseclib\Crypt\RSA->load( ???, ??? ) ...\my.class.php:986
我认为这是将 pem 粘贴到 phpmyadmin 中的问题,是这里的问题吗?我找不到任何使用 $key->load() 而不是 $key->loadKey() 与 pem 文件的示例,甚至更少在数据库中使用 pem 密钥。
我的下一个方法将是加载文件内容,如果这种方法毕竟是死胡同。
最后我从文件中加载它( $pub = file_get_contents($path);),这有效。