2012-05-21 9 views
3

La tentative de connexion à une instance Amazon EC2 à l'aide d'un fichier .pem, PHP et phpseclib.Connexion SSH à l'instance Amazon EC2 via PHP

J'ai essayé c'est mentionné dans ce post: ssh access to ec2 from php

Cependant, je continue à obtenir « Erreur 111. Connexion refusée dans ... »

Lorsque je me connecte de ma propre machine en utilisant ssh et même fichier .pem, il n'y a pas d'erreurs.

Voici le code du message original que j'utilise:

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'); 
} 

Répondre

4

Je viens de tester l'exemple de code fourni et il fonctionne avec mon instance Amazon EC2 Ubuntu.

Vous devez vérifier l'évidence proposée:

  • Hostname
  • Nom d'utilisateur
  • Chemin du fichier PEM

Sont-ils corrects? Êtes-vous sûr d'utiliser les mêmes que ceux que vous utilisez pour vous connecter depuis votre propre machine?

Si elles sont identiques, testez-vous le code de la même machine? Si ce n'est pas le cas, l'hôte à partir duquel vous exécutez le code a-t-il le port 22 ouvert pour les connexions sortantes?

+0

Je suis très sûr que toutes ces bases évidentes sont couvertes. Une remarque est que ceci est spécifiquement pour une instance de FMS exécutant CentOS. Je ne sais pas si cela fait une différence. Le problème du port sortant semble valoir la peine d'être vérifié. Je reviendrai après avoir vérifié cela. – user883210

+0

Selon mon hôte, le port 22 est ouvert pour les connexions sortantes. Ce qui est étrange, cependant, c'est que je peux ouvrir une connexion SSH via mon terminal (machine locale), mais php (host) signale la même erreur 111 soit via NET_SSH2 de phpseclib soit directement via la commande fsockopen utilisée par phpseclib. – user883210

+1

semble être un problème spécifique à l'hôte, avec une personne de soutien mal informée qui m'a répondu la première fois. le port 22 a été bloqué par un pare-feu hostgator. Cela pourrait aider quelqu'un à l'avenir: http://support.hostgator.com/articles/how-to-enable-fsockopen – user883210

0

chose évidente à vérifier, est le port ouvert et autorisé pour votre utilisateur?

juste essayer de faire:

wget ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:22 

De la machine qui te donne du mal et voir si vous pouvez ouvrir le socket.

Je suppose que vous devrez peut-être exécuter cette commande via PHP avec shell_exec() pour vous assurer qu'il est appelé par le même utilisateur/paramètres de sécurité.

+0

Je n'ai pas pu obtenir de réponse de PHP lors de l'exécution de wget avec shell_exec – user883210