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 операције. Сучеље конструктора избегава подкласу апликације чији би задатак био замена интерних socket поља.

Повезани чланци