phpseclib 3 SFTP per jau sukurtą proxy srautą
Naudokite viešą phpseclib 3 srauto konstruktorių, kad pradėtumėte SFTP per jau sukurtą HTTP arba SOCKS tunelį.
phpseclib 3 priima atvirą srauto išteklių ten, kur jo SSH/SFTP konstruktorius kitu atveju gautų mazgo pavadinimą. Tai yra viešas perdavimo taškas ryšiui, kuris jau keliauja per proxy.
Pirmiausia jungtis sukuria HTTP CONNECT arba SOCKS tunelį į tikrąjį SFTP serverį ir jo prievadą. Tada sukurtas srautas perduodamas 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 yra jau prijungtas srautas, o ne proxy URL. $expectedHostKey yra patikima serverio viešojo rakto eilutė, gauta per programos paruošimo procesą, tokiu formatu, kokį grąžina phpseclib. Prisijungimo duomuo gali būti palaikomas slaptažodis arba įkeltas rakto objektas, kurį pasirenka programa.
Apibrėžkite, ką grąžina jungtis
Srautas jau turi vesti į SFTP serverį. HTTP CONNECT atveju tai reiškia, kad proxy priėmė paskirties tašką ir visos proxy atsakymo antraštės buvo sunaudotos. SOCKS atveju atitinkamos derybos turi būti sėkmingai baigtos. Visi SSH baitai, jau perskaityti už šios ribos, turi likti prieinami SSH įgyvendinimui.
Tuo metu phpseclib atlieka SSH mainus ir pradeda SFTP tame pačiame sraute. Programa gali naudoti įprastas SFTP operacijas. Konstruktoriaus sąsaja išvengia programos poklasio, kurio užduotis būtų pakeisti vidinius lizdo laukus.