Ho usato ssh2_connect()
funzione per stabilire una connessione a un server SSH remoto. Ma funziona su un server web e fallisce su un altro (chiamiamolo come webserver1 e webserver 2 di seguito). Ottengo questo errore:unable to establish connection error
sul server web2. Entrambi i server web 1 e 2 sono configurazioni identiche che eseguono Apache e la cosa strana è che il problema si è verificato solo dopo il riavvio del server web2. L'apache completo error_log
di webserver2 è il seguente:
[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
Di seguito è riportato lo 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"; } }
Come risolvere ssh_connect() :impossibile stabilire una connessione
Passaggio 1: Verificare la presenza del firewall sul server remoto. Una regola del firewall potrebbe bloccare le connessioni dal server web2.
Passaggio 2: Testiamo l'SSH dal terminale di webserver2 come di seguito:
# ssh <username>@<REMOTE_IP> -p 22
Passaggio 3: Se il comando SSH sopra funziona, controlla se SELinux è abilitato. Se abilitato, assicurati di bypassare SELinux per le directory web in quanto potrebbe bloccarsi.
Passaggio 4: Per impostazione predefinita, SELinux impedisce al server Web Apache di stabilire connessioni di rete.
Non disabilitare SELinux!Su CentOS 7, SELinux è abilitato per impostazione predefinita. SELinux migliora la sicurezza del server limitando e definendo il modo in cui un server elabora le richieste e gli utenti interagiscono con socket, porte di rete e directory essenziali. Si sconsiglia di disabilitare SELinux per motivi di sicurezza, poiché consentirete la compromissione dell'intero sistema.
Esegui il comando seguente per consentire agli script e ai moduli HTTPD di connettersi alla rete utilizzando qualsiasi porta TCP.
# /usr/sbin/setsebool -P httpd_can_network_connect 1
Questo è tutto!