phpseclib 3 sprejme odprt vir toka tam, kjer bi njegov konstruktor SSH/SFTP sicer prejel ime gostitelja. To je javna točka predaje za povezavo, ki že poteka skozi proxy.

Najprej konektor vzpostavi tunel HTTP CONNECT ali SOCKS do dejanskega strežnika SFTP in njegovih vrat. Nato se vzpostavljeni tok preda 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 že povezan tok, ne proxy URL. $expectedHostKey je zaupanja vreden niz javnega ključa strežnika, pridobljen s postopkom priprave aplikacije, v obliki, ki jo vrne phpseclib. Poverilnica za prijavo je lahko podprto geslo ali naložen objekt ključa, ki ga izbere aplikacija.

Določite, kaj konektor vrne

Tok mora že voditi do strežnika SFTP. Pri HTTP CONNECT to pomeni, da je proxy sprejel cilj in da so bile porabljene celotne glave odgovora proxyja. Pri SOCKS morajo biti ustrezna pogajanja uspešno zaključena. Vsi bajti SSH, ki so bili že prebrani onkraj te meje, morajo ostati na voljo izvedbi SSH.

V tem trenutku phpseclib izvede izmenjavo SSH in zažene SFTP na istem toku. Aplikacija lahko uporablja običajne operacije SFTP. Vmesnik konstruktorja se izogne podrazredu aplikacije, katerega naloga bi bila zamenjati notranja polja vtičnice.

Sorodni članki