phpseclib 3 prihvaća otvoreni resurs toka tamo gdje bi njegov SSH/SFTP konstruktor inače primio naziv hosta. To je javna točka predaje za vezu koja već prolazi kroz proxy.

Najprije konektor uspostavlja HTTP CONNECT ili SOCKS tunel do stvarnog SFTP poslužitelja i porta. Zatim se uspostavljeni tok predaje SFTP-u:

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 već povezan tok, a ne proxy URL. $expectedHostKey je pouzdani javni ključ poslužitelja kao niz, dobiven kroz proces pripreme aplikacije, u formatu koji vraća phpseclib. Vjerodajnica za prijavu može biti podržana lozinka ili učitani objekt ključa koji odabere aplikacija.

Definirajte što konektor vraća

Tok već mora voditi do SFTP poslužitelja. Za HTTP CONNECT to znači da je proxy prihvatio odredište i da su potrošena kompletna zaglavlja proxy odgovora. Za SOCKS relevantno pregovaranje mora biti uspješno dovršeno. Svi SSH bajtovi koji su već pročitani iza te granice moraju ostati dostupni SSH implementaciji.

U tom trenutku phpseclib obavlja SSH razmjenu i pokreće SFTP na istom toku. Aplikacija može koristiti uobičajene SFTP operacije. Sučelje konstruktora izbjegava podklasu aplikacije čiji bi zadatak bio zamijeniti interne socket članove.

Povezani članci