V předchozím článku o použití populárního SSH2 v prostředí PHP jsme si řekli něco málo o problematice instalace extension do PHP a poté jsme si vyzkoušeli připojit se k SSH serveru a poslat nějaký příkaz… Tentokrát bych se rád věnoval transferům dat pomocí SSH2. Řekneme si něco o použití SCP a SFTP, což jsou vlastně přenosové technologie využívající bezpečnosti SSH protokolu.

SCP

Začneme se SCP, protože je jeho použití nejjednodušší. V PHP existují pouze dvě funkce, které se SCP dokáží pracovat – je to samozřejmě funkce ke stažení a nahrání souboru na server. SCP již není v současnosti zrovna nejžádanější a navíc je zastaralé.

Nyní se tedy pokusíme nahrát na server mujserver.mojedomena.neco soubor, a to například z adresáře /lokalni/soubor.txt na /vzdaleny/soubor.txt. Jako v předchozím článku používám autentizaci heslem 123456799 a uživatelským jménem uzivatel. K nahrání souboru na server použijeme funkci ssh2_scp_send().

<?php
$spojeni = ssh2_connect(„mujserver.mojedomena.neco“, 22);
// Jako vzdy nejdrive provedeme spojeni se serverem.
ssh2_auth_password($spojeni, „uzivatel“, „123456799“);
// Nyni se prihlasime.
ssh2_scp_send($spojeni, „/lokalni/soubor.txt“, „/vzdaleny/soubor.txt“, 0660);
// A nakonec preneseme soubor. Za zminku stoji posledni parametr funkce – urcuje prava souboru, ktera budou prirazena na vzdalenem serveru. Prava se zapisuji ciselne a vice se o nich dozvite nejcasteji na webech zabyvajicich se Linuxem.
?>

Protože stažení souboru je velmi podobné, pouze změníme název funkce a pořadí parametrů. (Samozřejmě pro správnou funkčnost musí být nejprve zajištěno spojení se serverem.)

ssh2_scp_recv($spojeni, „/vzdaleny/soubor.txt“, „/lokalni/soubor.txt“);

Funkce ssh2_scp_recv() nepodporuje žádný parametr, který by stanovil, s jakými právy přenést soubor.

SFTP

Základem úspěchu práce se SFTP je jeho inicializace, která probíhá za použití funkce ssh2_sftp(). Aby to fungovalo, musí být v době použití této funkce aktivní spojení a platná autentizace do systému.

<?php
$sftp = ssh2_sftp($spojeni);
// Inicializujeme SFTP. Promenna $spojeni odkazuje na funkcni spojeni (viz prechodzi priklady).
$data = fopen(„ssh2.sftp://$sftp/cesta/k/souboru.txt“, „r“);
// Otevirame soubor pro cteni.
?>

Pomocí velmi podobného postupu by se tato ukázka dala použít nejenom pro čtení souborů, ale i pro zápis – stačí pouze ovládat funkce pro práci se souborovým systémem.

Teď se podíváme na dvě funkce, které pracují s adresáři. U těchto funkcí jsou dvě možnosti, jak určit, se kterou složkou pracovat.

První funkce, která nás bude zajímat je určena pro vytváření nových adresářů – ssh2_sftp_mkdir():

ssh2_sftp_mkdir($sftp, „/cesta/k/nove/vytvorenemu/adresari“);
// Prvni zpusob.
mkdir(„ssh2.sftp://$sftp/cesta/k/nove/vytvorenemu/adresari“);
// Druhy zpusob.

Druhá funkce, pro mazání adresářů, je ssh2_sftp_rmdir():

ssh2_sftp_rmdir($sftp, „/cesta/k/mazanemu/adresari“);
// Prvni zpusob.
rmdir(„ssh2.sftp://$sftp/cesta/k/mazanemu/adresari“);
// Druhy zpusob.

Jak jde vidět, rozdíl je v obou verzích zápisu nepatrný a funkčně jsou úplně stejné, je tudíž na každém, který zápis preferuje.

Další funkce, která nás zajímá, je ssh2_sftp_rename(). Jak už název napovídá, slouží k přejmenování souborů. Pokusíme se o přejmenování souboru ze stary_nazev.txt na novy_nazev.txt:

ssh2_sftp_rename($sftp, „/stary_nazev.txt“, „/novy_nazev.txt“);

Bohužel, u této funkce již není možné používat dva různé zápisy, ale pouze jeden, a to ten, který zde uvádím.

Dále v extension SSH2 existuje sada funkcí pro práci se symbolickými odkazy, těmi se ale zabývat nebudeme. Pro stručnou informaci uvádím krátký výpis některých z nich:

  • ssh2_sftp_symlink() – vytvoření symbolického odkazu
  • ssh2_sftp_unlink() – zrušení symbolického odkazu
  • ssh2_sftp_readlink() – zjištění cíle symbolického odkazu

Další užitečné funkce můžete najít v dokumentaci k extension SSH2.

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

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

1 Příspěvěk v diskuzi

Odpovědět