phpseclib 3 SFTP праз ужо ўсталяваную плыню проксі
Выкарыстайце публічны канструктар плыні phpseclib 3, каб запусціць SFTP праз ужо ўсталяваны тунэль HTTP або SOCKS.
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. Інтэрфейс канструктара пазбягае падкласа праграмы, задачай якога было б замяніць унутраныя палі сокета.