Jistě jste jako vývojáři nějaké aplikace v PHP potřebovali uskutečnit práci s operačním systémem, na kterém vám běží celý server, a zároveň jste řešili dilema na téma bezpečnost celého serveru. Jak pracovat s pokročilými funkcemi operačního systému s minimálním rizikem napadení serveru skrze nevhodně nastavené PHP se vám pokusím nastínit v tomto článku.

Extension (rozšíření) SSH2 je vcelku nové a přináší do PHP spoustu zajímavých možností. Jako příklad bych asi uvedl bezpečný transfer souborů a přímou správu operačního systému, pod kterým běží stroj, na který se připojujete. Samozřejmostí je požadavek, aby server nebo stroj, na který se připojujete, měl spuštěný SSH server a vy na něm měli nějaký uživatelský účet.

Instalace extension SSH2 do PHP – Linux

Pokud nemáme na serveru nainstalované OpenSSL, stáhneme jej a nainstalujeme podle návodu, který bývá součástí balíku. Podle dokumentace PHP je dobré mít nainstalovaný přímo balík OpenSSL-dev, který obsahuje některé utility pro vývojáře.

Protože existují dva hlavní ověřené postupy kompilace extension modulu ssh2.so, uvedu ten kratší a lépe automatizovaný. Zadáme tedy pouze tento příkaz, který nám vygeneruje již zmíněný ssh2.so:

phpize && ./configure –with-ssh2 && make

Dále nakopírujeme vzniklý modul ssh2.so do složky definované v konfiguračním souboru PHP (php.ini) jako extension_dir a přidáme do téhož konfiguračního souboru PHP následující řádek:

extension=ssh2.so

Tím jsme vlastně PHP oznámili, že má načítat tento modul.

Instalace extension SSH2 do PHP – Windows

Instalace modulu na servery s Windows je o něco jednodušší. Nemusíme nic kompilovat, pouze stáhneme příslušný modul v binární podobě z adresy http://snaps.php.net, nakopírujeme ho do složky definované v konfiguračním souboru PHP jako extension_dir a přidáme do téhož konfiguračního souboru PHP (php.ini) tento řádek:

extension=php_ssh2.dll

A je hotovo. Ať už máme Windows nebo Linux, SSH2 by již mělo po restartu webserveru běžet. Pokud ne, zkuste se vrátit na začátek a popřemýšlet o možných chybách.

Spojení a práce s SSH2 v PHP

Pro začátek malý příklad navázání spojení se serverem a následný pokus o přihlášení:

<?php
if(! $spojeni = ssh2_connect(„mujserver.mojedomena.neco“, 22)) { die(„Chyba spojeni!“); }
// Vytvoří spojení s hostitelem na adrese mujserver.mojedomena.neco na
// portu 22 a zároveň dá vědět, pokud spojení nebude možné uskutečnit.
if (ssh2_auth_password($spojeni, „uzivatel“, „123456799“)) {
  echo „Prihlaseni probehlo v poradku!“;
} else {
  die(„Prihlaseni nebylo uskutecneno v poradku!“);
}
// Pokusí se přihlásit jako uživatel „uzivatel“ s heslem „123456799“,
// pokud jsou přihlašovací údaje v pořádku, dostaneme hlášku o tom,
// že je vše v pořádku, pokud ne, dostaneme méně příjemnou hlášku…
?>

Máte podezření, že by se někdo mohl pokusit o hack spojení, případně si rádi pohlídáte fingerprint vzdáleného ssh serveru? Řešení hledejte ve funkci ssh2_fingerprint:

<?php
$znamy_hostitel = ‚223B9F343CC5032323F45A1‘;
// Zde definujeme proměnnou, ve které je fingerprint vzdáleného ssh
// serveru, který známe a hlavně očekáváme.
$spojeni = ssh2_connect(„mujserver.mojedomena.neco, 22);
// Jako předtím – spojíme se se serverem.
$fingerprint = ssh2_fingerprint($spojeni, SSH2_FINGERPRINT_MD5 | SSH2_FINGERPRINT_HEX);
// Zjístíme fingerprint a uložíme do proměnné.
if ($fingerprint != $znamy_hostitel) { die(„Nesouhlasi fingerprint!“);
}
// A teď už jen porovnáme známý fingerprint s tím, který nám
// právě server nabízí.
?>

A co tak spustit vzdáleně na serveru nějaký ten program nebo skriptík? Ani to není problém:

<?php
$spojeni = ssh2_connect(„mujserver.mojedomena.neco“, 22);
// Jako vždy nejdříve vytvoříme spojení.
ssh2_auth_password($spojeni, „uzivatel“, „123456799“);
// Přihlásíme se. Samozřejmě uvedeme platné údaje – uživatele, heslo i
// server.
ssh2_exec($spojeni, „reboot“);
// A teď pošleme vzdálenému serveru nějaký ten příkaz, co má udělat.
// Protože mě nic jiného nenapadlo, restartuji OS.
?>

Protože modul SSH2 obsahuje mnoho funkcí, bylo by náročné vypisovat je zde všechny a ke každé uvádět nějaký příklad. Bližší popis všech funkcí modulu najdete v dokumentaci PHP na adrese http://www.php.net/manual/en/ref.ssh2.php.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět