通过PHP连接到Amazon EC2实例的SSH连接

3
尝试使用 .pem 文件、PHP 和 phpseclib 连接到 Amazon EC2 实例。
我已经尝试了此帖子中提到的方法: ssh access to ec2 from php, 但是我一直收到“Error 111. Connection refused in…”的错误提示。
当我使用 ssh 和相同的 .pem 文件从自己的机器连接时,没有出现任何错误。
这是我正在使用的原始帖子中的代码:
include('Net/SSH2.php');
include('Crypt/RSA.php');

$key = new Crypt_RSA();

$key->loadKey(file_get_contents('/pathtokey.pem'));


$ssh = new Net_SSH2('ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com');
if (!$ssh->login('user', $key)) {
    exit('Login Failed');
}
2个回答

4

我刚刚测试了提供的示例代码,并且它可以在我的Amazon EC2 Ubuntu实例上正常运行。

您需要检查以下明显的问题:

  • 主机名
  • 用户名
  • PEM文件路径

它们是否正确?您确定您使用的是从自己的计算机连接时使用的相同信息吗?

如果它们是相同的,您是否从同一台计算机测试代码?如果不是,请确认您正在运行代码的主机是否开放了22号端口用于出站连接?


我非常确定所有那些显而易见的基础都已经覆盖了。需要注意的是,这是专门针对运行CentOS的FMS实例。不确定是否有所区别。出站端口问题似乎值得检查。检查后再回来。 - user883210
根据我的主机,端口22对于出站连接是开放的。然而,奇怪的是,我可以通过我的终端(本地机器)打开一个SSH连接,但是PHP(主机)通过phpseclib的NET_SSH2或直接通过phpseclib使用的fsockopen命令报告相同的错误111。 - user883210
1
看起来这是一个特定于主机的问题,第一次回复我的支持人员提供了错误信息。22号端口被HostGator防火墙阻止了。这可能会帮助未来的某个人:http://support.hostgator.com/articles/how-to-enable-fsockopen - user883210

0
显而易见的事情是检查端口是否对您的用户开放和允许连接吗?
尝试只做这个:
wget ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:22

从出现问题的机器上尝试打开套接字。

我猜您可能需要通过 shell_exec() 以 PHP 方式运行该命令,以确保它由同一用户/安全设置调用。


当使用shell_exec运行wget时,我无法从PHP获得任何回复。 - user883210

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接