J'ai utilisé le ssh2_connect()
fonction pour établir une connexion à un serveur SSH distant. Mais cela fonctionne sur un serveur Web et échoue sur un autre (appelons-le Webserver1 et Webserver 2 ci-après). J'obtiens cette erreur - unable to establish connection error
sur le serveur Web2. Les serveurs Web 1 et 2 sont des configurations identiques exécutant Apache et ce qui est étrange, c'est que le problème ne s'est produit qu'après le redémarrage du serveur Web2. Le error_log
apache complet de webserver2 est la suivante :
[Wed Dec 15 10:30:35 2021] [error] [client 192.168.xxx.xx] PHP Warning: ssh2_connect(): Unable to connect to 192.168.xx.xxx on port 22 in /var/www/html/process.php on line 9 [Wed Dec 15 10:30:35 2021] [error] [client 192.168.xxx.xx] PHP Warning: ssh2_connect(): Unable to connect to 192.168.xx.xxx in /var/www/html/process.php on line 9
Ci-dessous le script PHP :
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); if(!($con = ssh2_connect(REMOTE_IP, 22))){ echo "fail: unable to establish connection\n"; } else { // try to authenticate with username root, password secretpassword if(!ssh2_auth_password($con, $username, $password)) { echo "fail: unable to authenticate\n"; header('Location: ../../login/?error=1'); exit(); } else { echo "Logged in..\n"; } }
Comment résoudre ssh_connect() :impossible d'établir la connexion
Étape 1 : Vérifiez le pare-feu sur le serveur distant. Une règle de pare-feu bloque peut-être les connexions du serveur Web 2.
Étape 2 : Testons le SSH depuis le terminal de webserver2 comme ci-dessous :
# ssh <username>@<REMOTE_IP> -p 22
Étape 3 : Si la commande SSH ci-dessus fonctionne, vérifiez si SELinux est activé. S'il est activé, assurez-vous de contourner SELinux pour les répertoires Web car il pourrait être bloquant.
Étape 4 : Par défaut, SELinux empêche le serveur Web Apache d'établir des connexions réseau.
Ne désactivez pas SELinux !Sur CentOS 7, SELinux est activé par défaut. SELinux améliore la sécurité du serveur en restreignant et en définissant la manière dont un serveur traite les requêtes et les utilisateurs interagissent avec les sockets, les ports réseau et les répertoires essentiels. Il n'est pas recommandé de désactiver SELinux pour des raisons de sécurité, car vous risqueriez de compromettre l'ensemble du système.
Exécutez la commande ci-dessous pour autoriser les scripts et modules HTTPD à se connecter au réseau à l'aide de n'importe quel port TCP.
# /usr/sbin/setsebool -P httpd_can_network_connect 1
C'est tout !