2010-09-27 26 views
2

我需要通过php的ssh2函数连接到一些Amazon EC2实例以获取一些信息并将其显示在我的后台上。如何在php的ssh2函数中使用pem文件

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

ssh -i path_to_file/key.pem host01-ec2 

感谢

回答

2

您可以使用openssl_pkey_get_public提取酒吧/私钥,然后用ssh2_auth_pubkey_file授权。

+0

感谢您的回答公钥(我试过了,如果你有这两个键它的作品),但事情是使用命令行的连接时SSH我只使用私钥,公众从主机中检索。你知道我是否可以在PHP ssh函数中这样做吗? – Khriz 2010-09-27 10:46:52

+0

听起来很奇怪。你通常拥有公钥,如果你有私钥的话。它不在你的'.ssh'目录中吗? – troelskn 2010-09-28 07:40:00

+0

是的,我在.ssh文件夹中,但不用担心,可能是一个为我生成pem的人的错误...非常感谢您的回答 – Khriz 2010-09-28 10:15:43

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%的私钥内嵌有公钥。但无论如何 - 这不像他们问我哈哈。

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);