phpseclib 3 prijíma otvorený zdroj streamu tam, kde by jeho konštruktor SSH/SFTP inak dostal názov hostiteľa. To je verejný odovzdávací bod pre pripojenie, ktoré už prechádza cez proxy.

Najprv konektor nadviaže tunel HTTP CONNECT alebo SOCKS k skutočnému serveru SFTP a jeho portu. Potom sa zavedený stream odovzdá SFTP:

use phpseclib3\Net\SFTP;

$sftp = new SFTP($tunnel);

$actualHostKey = $sftp->getServerPublicHostKey();
if ($actualHostKey === false
    || !hash_equals($expectedHostKey, $actualHostKey)) {
    throw new RuntimeException('Unexpected SFTP server key');
}

if (!$sftp->login($sftpUser, $sftpCredential)) {
    throw new RuntimeException('SFTP login failed');
}

$tunnel je už pripojený stream, nie proxy URL. $expectedHostKey je dôveryhodný reťazec verejného kľúča servera získaný procesom prípravy aplikácie, vo formáte, ktorý vracia phpseclib. Prihlasovací údaj môže byť podporované heslo alebo načítaný objekt kľúča, ktorý aplikácia zvolí.

Definujte, čo konektor vracia

Stream už musí viesť k serveru SFTP. Pri HTTP CONNECT to znamená, že proxy prijala cieľ a boli spotrebované kompletné hlavičky odpovede proxy. Pri SOCKS musí byť príslušné vyjednávanie úspešne dokončené. Akékoľvek bajty SSH už prečítané za touto hranicou musia zostať dostupné implementácii SSH.

V tomto bode phpseclib vykoná výmenu SSH a spustí SFTP na tom istom streame. Aplikácia môže používať svoje obvyklé operácie SFTP. Rozhranie konštruktora sa vyhýba podtriede aplikácie, ktorej úlohou by bolo nahradiť interné polia socketu.

Súvisiace články