我需要通过php的ssh2函数连接到一些Amazon EC2实例,以获取一些信息并将其显示在我的后台。
在ssh2函数中有没有办法在通过命令行ssh连接时做同样的事情?
ssh -i path_to_file/key.pem host01-ec2
由于
答案 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);