phpseclib 3 prihvata otvoreni resurs toka tamo gde 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 kao niz, 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 uspešno završeno. Svi SSH bajtovi koji su već pročitani iza te granice moraju ostati dostupni SSH implementaciji.

U tom trenutku phpseclib obavlja SSH razmenu i pokreće SFTP na istom toku. Aplikacija može koristiti uobičajene SFTP operacije. Sučelje konstruktora izbegava podklasu aplikacije čiji bi zadatak bio zamena internih socket polja.

Povezani članci