Použil jsem ssh2_connect()
funkce pro navázání připojení ke vzdálenému serveru SSH. Ale funguje to na jednom webovém serveru a selže na jiném (nazývejme to jako webserver1 a webserver 2). Zobrazuje se mi tato chyba – unable to establish connection error
na webovém serveru 2. Oba webové servery 1 a 2 jsou identická nastavení se systémem Apache a je zvláštní, že k problému došlo až po restartu webového serveru2. Kompletní error_log
Apache webu webserver2 je následující:
[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
Níže je skript 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"; } }
Jak vyřešit ssh_connect() :nelze navázat připojení
Krok 1: Zkontrolujte bránu firewall na vzdáleném serveru. Pravidlo brány firewall může blokovat připojení z webového serveru2.
Krok 2: Pojďme otestovat SSH z terminálu webserver2, jak je uvedeno níže:
# ssh <username>@<REMOTE_IP> -p 22
Krok 3: Pokud výše uvedený příkaz SSH funguje, zkontrolujte, zda je povolen SELinux. Pokud je povoleno, nezapomeňte obejít SELinux pro webové adresáře, protože by mohl blokovat.
Krok 4: Ve výchozím nastavení SELinux brání webovému serveru Apache v navazování síťových připojení.
Nezakazujte SELinux!Na CentOS 7 je SELinux ve výchozím nastavení povolen. SELinux zlepšuje zabezpečení serveru tím, že omezuje a definuje, jak server zpracovává požadavky a jak uživatelé interagují se sokety, síťovými porty a základními adresáři. Z bezpečnostních důvodů se nedoporučuje deaktivovat SELinux, protože tím umožníte kompromitaci celého systému.
Spuštěním níže uvedeného příkazu umožníte HTTPD skriptům a modulům připojit se k síti pomocí libovolného TCP portu.
# /usr/sbin/setsebool -P httpd_can_network_connect 1
To je ono!