PHP SSH2 и Amazon EC2 .pem

Я искал способ использовать SSH2 PHP для создания типа терминал. Чтобы подключиться к Amazon в обычном терминале, вы должны использовать что-то вроде ssh -i path_to/key.pem ec2.ip-555-xxx.com. С другой стороны, в PHP SSH2 имеет функцию ssh2_auth_pubkey_file. Но здесь я наткнулся на небольшую стену, так как Amazon предоставляет мне только 1 файл закрытого ключа (.pem), а функция имеет аргументы как для закрытого, так и для открытого ключа. В конечном итоге я хотел бы, чтобы клиент загружал файл .pem на сервер и мог подключаться к локальному или удаленному серверу SSH с помощью PHP SSH2 на Amazon, используя этот файл .pem.


person ndmweb    schedule 09.08.2011    source источник
comment
Я нашел этот пост, но ответ не очень помог. stackoverflow.com/questions/3802926/   -  person ndmweb    schedule 09.08.2011


Ответы (3)


.pem — это сертификат сервера для веб-сервера apache, он не имеет ничего общего с ssh. См.: https://serverfault.com/questions/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file-f< /а>

Кажется, это также может быть комбинированный файл с открытым и закрытым ключами. В любом случае напрямую по ssh работать не будет, нужно будет конвертировать в обычные файлы.

У вас все равно это наоборот - амазонка не даст вам закрытый ключ, как раз наоборот - вы даете амазонке открытый ключ. Вы создаете пару закрытый/открытый ключ локально, а затем загружаете открытый ключ в файлы .ssh/authorize_keys.

person Ariel    schedule 09.08.2011
comment
на самом деле это именно то, что Amazon дает вам для первого подключения к вашему экземпляру. Он генерирует закрытый ключ для загрузки и загружает открытый ключ в .ssh/authorized_keys. После первого подключения вы можете загрузить свои ключи - person arunkumar; 09.08.2011
comment
На самом деле, я не думаю, что это правильно или уже правильно. Я только что настроил свой экземпляр Amazon, получил свой файл .pem, поместил его в свою папку .ssh и смог подключиться к своей машине по ssh с помощью этой команды: ssh -i mypem.pem [email protected]. Поскольку я все равно создаю псевдоним SSH_config, я просто добавляю файл идентификации для этого файла pem и теперь просто делаю ssh amz в командной строке. - person Mauvis Ledford; 16.10.2011

Лично я бы рекомендовал использовать phpseclib, чистую реализацию PHP SSH2:

<?php
include('Net/SSH2.php');

$key = new Crypt_RSA();
//$key->setPassword('whatever');
$key->loadKey(file_get_contents('privatekey'));

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', $key)) {
    exit('Login Failed');
}

echo $ssh->exec('ls -la');
?>
person nigol    schedule 11.08.2011

Вот как вы получаете закрытый и открытый ключи из .pem в php.

$eKey = file_get_contents('/pathto/key.pem');
$key_private = openssl_get_privatekey($eKey);
$keyDet=openssl_pkey_get_details($key_private);
$key_public = openssl_pkey_get_public(array($keyDet['key'],""));
$keyPDet=openssl_pkey_get_details($key_public);
person Mohammed Atif Sami    schedule 28.11.2011