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

时间:2018-04-16 14:50:14

标签: php openssh 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密钥文件登录。我错过了什么?谢谢

1 个答案:

答案 0 :(得分:1)

从你的帖子:

$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-----。需要私钥,因为这是您验证身份的方式。您使用私钥进行签名,服务器将使用公钥进行验证。