如何在php的ssh2函数中使用pem文件

时间:2010-09-27 10:25:45

标签: php ssh amazon-ec2

我需要通过php的ssh2函数连接到一些Amazon EC2实例,以获取一些信息并将其显示在我的后台。

在ssh2函数中有没有办法在通过命令行ssh连接时做同样的事情?

ssh -i path_to_file/key.pem host01-ec2

由于

3 个答案:

答案 0 :(得分:2)

您可以使用openssl_pkey_get_public提取发布/私钥,然后使用ssh2_auth_pubkey_file进行授权。

答案 1 :(得分:2)

您可以使用phpseclib, a pure PHP SSH implementation来轻松完成此操作:

<?php
include('Crypt/RSA.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('pwd');
echo $ssh->exec('ls -la');
?>

phpseclib似乎支持多种不同的密钥格式:

http://www.frostjedi.com/phpbb/viewtopic.php?f=46&t=15226

ssh2_auth_pubkey_file()需要公钥和私钥的事实是愚蠢的,因为99%的私钥都嵌入了公钥。但无论如何 - 这不像是他们问我哈哈。

答案 2 :(得分:1)

以下是如何从私钥获取公钥

$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);
相关问题