Я пытаюсь использовать 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-----
в этом. Закрытый ключ необходим, потому что именно так вы подтверждаете свою личность. Вы подписываете с закрытым ключом, сервер проверяет с открытым ключом.
Других решений пока нет …