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!