【发布时间】:2011-04-17 16:55:30
【问题描述】:
我需要通过 php 的 ssh2 函数连接到一些 Amazon EC2 实例以获取一些信息并将其显示在我的后台。
在 ssh2 函数中是否有办法与我通过命令行 ssh 连接时做的一样?
ssh -i path_to_file/key.pem host01-ec2
谢谢
【问题讨论】:
标签: php ssh amazon-ec2
我需要通过 php 的 ssh2 函数连接到一些 Amazon EC2 实例以获取一些信息并将其显示在我的后台。
在 ssh2 函数中是否有办法与我通过命令行 ssh 连接时做的一样?
ssh -i path_to_file/key.pem host01-ec2
谢谢
【问题讨论】:
标签: php ssh amazon-ec2
这里是如何从私钥获取公钥
$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);
【讨论】:
你可以使用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% 的时间私钥都嵌入了公钥。但无论如何——这不像他们问我的那样,哈哈。
【讨论】:
您可以使用openssl_pkey_get_public提取pub/private密钥,然后使用ssh2_auth_pubkey_file进行授权。
【讨论】:
.ssh 目录吗?