无法使用带有 RSA 密钥的 phpseclib 登录?

Can not login using phpseclib with RSA keys?

我正在尝试使用 phpseclib 让应用程序在 linux 服务器上执行远程命令。我很容易让它与 username/password 一起工作,但我不想让该信息出现在纯文本文件中,所以我想使用 OpenSSH 生成的密钥。这是有问题的代码。

<?php
include 'Crypt/RSA.php';
include 'Net/SSH2.php';

$key = new Crypt_RSA();
$key->loadKey('key');
echo file_get_contents('key');

$ssh = new Net_SSH2('srv-test');
if (!$ssh->login('user', $key)) {
    exit('Login Failed');
}
echo $ssh->exec('ls');
?>

输出为

$ php test_key.php

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAqcmSbXneDVQsMe/kjKxkaaqKPTN5GUawoeknWL20exQN4HqCAklE
FMUcOd48ypAj4CZc9baGtjbpC3zCRDRcatJQTWbsP/P4vSe7728JPcVa0PVmqyi0
YF5rRAnkcNVA1X4EGriYhLYGTjeEZMjvrubBBgAsYUaRbyYBauSpp7GqAP3/sVk6
YeNRrs8nOLFYdp1bAmAlSemzixYWQ466jeHAfevD06WwSLwD1fh6Dfyt5kvsUZGp
7KldtHwBKg/YE947YSwIFkUVOQkyx7+7BgnDhTo8sgiY4in0YK9PIC5o/gBnBqw9
eBUjNFHTQSv8gRTEP68NfYipgy2VmcNPAQIDAQAB
-----END RSA PUBLIC KEY-----

Login Failed

key 文件是用

生成的
ssh-keygen -f .ssh/id_rsa.pub -e -m pem

(默认格式也不起作用),我通常可以使用 id_rsa.pub 密钥文件从控制台登录。我错过了什么?谢谢

来自你的post:

$key = new Crypt_RSA();
$key->loadKey('key');
echo file_get_contents('key');

$key->loadKey('key'); 不需要文件名 - 它需要实际的密钥。因此,如果您必须执行 file_get_contents('key') 来显示实际密钥,那么您必须执行 $key->loadKey(file_get_contents('key')).

此外,您需要提供 loadKey 私钥 - 而不是 public 密钥。看起来你不是因为你做的密钥 post 里面有 -----BEGIN RSA PUBLIC KEY-----。需要私钥,因为这是您验证身份的方式。您使用私钥签名,服务器使用 public 密钥进行验证。