无法使用带有 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 密钥进行验证。
我正在尝试使用 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 密钥进行验证。