He usado ssh2_connect()
función para establecer una conexión a un servidor SSH remoto. Pero funciona en un servidor web y falla en otro (llamémoslo webserver1 y webserver 2 de ahora en adelante). Recibo este error:unable to establish connection error
en el servidor web2. Ambos servidores web 1 y 2 son configuraciones idénticas que ejecutan Apache y lo extraño es que el problema ocurrió solo después de reiniciar el servidor web2. El apache completo error_log
de webserver2 es el siguiente:
[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
A continuación se muestra el 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"; } }
Cómo resolver ssh_connect():no se pudo establecer la conexión
# ssh <username>@<REMOTE_IP> -p 22
Paso 3: Si el comando SSH anterior funciona, verifique si SELinux está habilitado. Si está habilitado, asegúrese de omitir SELinux para directorios web, ya que podría estar bloqueando.
En CentOS 7, SELinux está habilitado de manera predeterminada. SELinux mejora la seguridad del servidor al restringir y definir cómo un servidor procesa las solicitudes y los usuarios interactúan con los sockets, los puertos de red y los directorios esenciales. No se recomienda deshabilitar SELinux por razones de seguridad, ya que permitirá que todo el sistema se vea comprometido.
Ejecute el siguiente comando para permitir que los scripts y módulos HTTPD se conecten a la red usando cualquier puerto TCP.
# /usr/sbin/setsebool -P httpd_can_network_connect 1
¡Eso es!