【问题标题】:How can I use pem files in php's ssh2 functions如何在 php 的 ssh2 函数中使用 pem 文件
【发布时间】: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


    【解决方案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);
    

    【讨论】:

      【解决方案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% 的时间私钥都嵌入了公钥。但无论如何——这不像他们问我的那样,哈哈。

      【讨论】:

      • 干得好。这对我来说很容易。这也允许运行mysqldump,通过它可以从Windows终端备份远程机器上的大表和整个数据库。
      【解决方案3】:

      您可以使用openssl_pkey_get_public提取pub/private密钥,然后使用ssh2_auth_pubkey_file进行授权。

      【讨论】:

      • 感谢您的回答(我试过了,如果你有两个密钥,它就可以工作),但问题是当连接命令行的 ssh 时,我只使用私钥,从主持人。你知道我是否可以在 PHP ssh 函数中这样做吗?
      • 这听起来很奇怪。你通常有公钥,如果你有私钥的话。不是在你的.ssh 目录吗?
      • 是的,我在 .ssh 文件夹中,但别担心,可能是为我生成 pem 的人的错误...非常感谢您的回答
      • 不,我有同样的问题,它只使用私钥
      猜你喜欢
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2015-03-29
      • 1970-01-01
      • 2011-07-09
      相关资源
      最近更新 更多