GNU/Linux >> Znalost Linux >  >> Linux

Nelze navázat spojení pomocí ssh2_connect() v PHP

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!


Linux
  1. PuTTY:Extrémní přeměna pomocí PuTTY Connection Manager

  2. Použití WGET ke spuštění cronjob PHP

  3. Jak rozbalit soubory přes FTP připojení?

  1. Jak zkontrolovat rychlost vašeho ssh připojení

  2. Nelze přidat uživatele pomocí useradd

  3. Nginx nezačne používat systemctl

  1. Ssh – pomocí již zavedeného kanálu Ssh?

  2. Bash + Použití Printf za účelem tisku ve speciálním formátu?

  3. Odstraňte problémy s odmítnutím připojení k FTP ve WordPressu