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



我正在尝试使用 phpseclib 让应用程序在 Linux 服务器上执行远程命令。我很容易让它使用用户名/密码,但我不想让这些信息出现在纯文本文件中,所以我想使用 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密钥文件登录。我错过了什么?谢谢

从你的帖子:

$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提供私钥 - 而不是公钥。看起来你不是,因为你发布的密钥中有-----BEGIN RSA PUBLIC KEY-----。需要私钥,因为这是您验证身份的方式。您使用私钥签名,服务器使用公钥进行验证。

最新更新