我正在尝试使用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
密钥文件登录。我错过了什么?谢谢
答案 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-----
。需要私钥,因为这是您验证身份的方式。您使用私钥进行签名,服务器将使用公钥进行验证。