PHP SSH2 and Amazon EC2 .pem's


PHP SSH2 and Amazon EC2 .pem's

我一直在寻找一种使用PHP的SSH2来创建一种终端的方法。要在普通终端中连接到Amazon,您可以使用类似ssh -i path_to/key.pem ec2.ip-555-xxx.com的东西。另一方面,在PHP中,SSH2有一个函数ssh2_auth_pubkey_file。但是我在这里遇到了一点困难,因为Amazon只提供了一个私钥(.pem)文件,并且该函数有私钥和公钥的参数。最终,我想有一个客户端上传一个。pem文件到服务器,并能够连接到本地或远程SSH服务器与PHP SSH2在亚马逊使用该。pem文件。

。Pem是apache web服务器的服务器证书,与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文件中。

我个人推荐使用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');
?>

这就是php

中从.pem获取私钥和公钥的方法。
$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);