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

Prvo konektor uspostavlja HTTP CONNECT ili SOCKS tunel do stvarnog SFTP servera 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č servera u obliku niza, dobijen kroz proces pripreme aplikacije, u formatu koji vraća phpseclib. Akreditiv za prijavu može biti podržana lozinka ili učitani objekat ključa koji odabere aplikacija.

Definišite šta konektor vraća

Tok već mora voditi do SFTP servera. Za HTTP CONNECT to znači da je proxy prihvatio odredište i da su kompletna zaglavlja odgovora proxyja potrošena. Za SOCKS relevantno pregovaranje mora biti uspješno završeno. Bilo koji 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 svoje uobičajene SFTP operacije. Konstruktorsko sučelje izbjegava podklasu aplikacije čiji je zadatak zamjena internih socket polja.

Povezani članci