GNU/Linux >> Tutoriales Linux >  >> Linux

No se puede establecer la conexión usando ssh2_connect() en PHP

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

Paso 1: Verifique el firewall en el servidor remoto. Una regla de firewall podría estar bloqueando las conexiones desde el servidor web2.

Paso 2: Probemos el SSH desde la terminal de webserver2 como se muestra a continuació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.

Paso 4: De forma predeterminada, SELinux evita que el servidor web Apache establezca conexiones de red.

¡No deshabilite SELinux!

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!


Linux
  1. Solucionar problemas de WordPress al rechazar una conexión FTP

  2. PuTTY:cambio de imagen extremo con PuTTY Connection Manager

  3. Cómo configurar Nginx para ejecutar PHP usando PHP-FPM

  4. Cómo permitir la conexión remota a la base de datos PostgreSQL usando psql

  5. Nginx no comienza a usar systemctl

Establecer una conexión SSH entre Windows y Linux

Cree una base de datos y una tabla MySQL usando PHP en XAMPP

Configurar la conexión de la base de datos usando la variable de entorno en Rails

Solución:no se puede establecer una conexión FTP a un servidor SFTP en FileZilla

Cómo conectarse a MySQL usando PHP

No se puede agregar un usuario usando useradd