phpseclib 3 прифаќа отворен ресурс за поток таму каде што неговиот SSH/SFTP конструктор инаку би добил име на домаќин. Тоа е јавната точка на предавање за врска што веќе се пренесува преку прокси.

Прво, конекторот воспоставува HTTP CONNECT или SOCKS тунел до вистинскиот SFTP сервер и неговиот порт. Потоа воспоставениот поток се предава на 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 е веќе поврзан поток, а не прокси URL. $expectedHostKey е низата со доверлив јавен клуч на серверот, добиена преку процесот на подготовка на апликацијата, во форматот што го враќа phpseclib. Пријавните податоци можат да бидат поддржаната лозинка или вчитан објект на клуч што го избира апликацијата.

Дефинирајте што враќа конекторот

Потокот веќе мора да води до SFTP серверот. За HTTP CONNECT тоа значи дека проксито ја прифатило дестинацијата и целите заглавија на одговорот на проксито се потрошени. За SOCKS соодветните преговори мора да завршиле успешно. Сите SSH бајти веќе прочитани надвор од таа граница мора да останат достапни за SSH имплементацијата.

Во тој момент phpseclib ја извршува SSH размената и започнува SFTP на истиот поток. Апликацијата може да ги користи вообичаените SFTP операции. Интерфејсот на конструкторот избегнува подкласа на апликацијата чија задача би била замена на внатрешни полиња на сокетот.

Поврзани статии