GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Es kann keine Verbindung mit ssh2_connect() in PHP hergestellt werden

Ich habe den ssh2_connect() verwendet Funktion, um eine Verbindung zu einem entfernten SSH-Server herzustellen. Aber es funktioniert auf einem Webserver und schlägt auf einem anderen fehl (nennen wir es im Folgenden als Webserver1 und Webserver 2). Ich erhalte diesen Fehler – unable to establish connection error auf webserver2. Sowohl die Webserver 1 als auch 2 sind identische Setups, auf denen Apache ausgeführt wird, und das Seltsame ist, dass das Problem erst nach dem Neustart des Webservers 2 auftrat. Das vollständige Apache error_log von webserver2 lautet wie folgt:

[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

Unten ist das PHP-Skript:

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";
           }
     }

So lösen Sie ssh_connect():Verbindung kann nicht hergestellt werden

Schritt 1: Suchen Sie nach der Firewall auf dem Remote-Server. Möglicherweise blockiert eine Firewall-Regel die Verbindungen von Webserver2.

Schritt 2: Testen wir SSH vom Terminal von webserver2 wie folgt:

# ssh <username>@<REMOTE_IP> -p 22

Schritt 3: Wenn der obige SSH-Befehl funktioniert, prüfen Sie, ob SELinux aktiviert ist. Wenn aktiviert, stellen Sie sicher, dass Sie SELinux für Webverzeichnisse umgehen, da es möglicherweise blockiert.

Schritt 4: Standardmäßig verhindert SELinux, dass der Apache-Webserver Netzwerkverbindungen herstellt.

Deaktivieren Sie SELinux nicht!

Unter CentOS 7 ist SELinux standardmäßig aktiviert. SELinux verbessert die Serversicherheit, indem es einschränkt und definiert, wie ein Server Anforderungen verarbeitet und Benutzer mit Sockets, Netzwerkports und wichtigen Verzeichnissen interagieren. Es wird aus Sicherheitsgründen nicht empfohlen, SELinux zu deaktivieren, da Sie sonst zulassen, dass das gesamte System kompromittiert wird.

Führen Sie den folgenden Befehl aus, damit HTTPD-Skripte und -Module über einen beliebigen TCP-Port eine Verbindung zum Netzwerk herstellen können.

#  /usr/sbin/setsebool -P httpd_can_network_connect 1

Das ist es!


Linux
  1. Verwendung von PHP in HTML-Seiten

  2. Ssh – Verwendung eines bereits eingerichteten SSH-Kanals?

  3. Fehlerbehebung bei WordPress, das eine FTP-Verbindung ablehnt

  4. Wie entpacke ich Dateien über eine FTP-Verbindung?

  5. Benutzer kann nicht mit useradd hinzugefügt werden

Stellen Sie eine SSH-Verbindung zwischen Windows und Linux her

Erstellen Sie eine MySQL-Datenbank und -Tabelle mit PHP in XAMPP

Konfigurieren Sie die Datenbankverbindung mithilfe der Umgebungsvariablen in Rails

Behebung:Es kann keine FTP-Verbindung zu einem SFTP-Server in FileZilla hergestellt werden

Wie man mit PHP eine Verbindung zu MySQL herstellt

Nginx beginnt nicht mit der Verwendung von systemctl