phpseclib 3 pranon një burim të hapur rrjedhe aty ku konstruktori i tij SSH/SFTP do të merrte ndryshe një emër hosti. Kjo është pika publike e dorëzimit për një lidhje që tashmë transportohet përmes një proxy.

Së pari, lidhësi vendos një tunel HTTP CONNECT ose SOCKS drejt serverit aktual SFTP dhe portës së tij. Më pas rrjedha e vendosur i kalon SFTP-së:

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 është një rrjedhë tashmë e lidhur, jo një URL proxy. $expectedHostKey është vargu i çelësit publik të besuar të serverit, i marrë përmes procesit të përgatitjes së aplikacionit, në formatin që kthen phpseclib. Kredenciali i hyrjes mund të jetë fjalëkalimi i mbështetur ose një objekt çelësi i ngarkuar që zgjedh aplikacioni.

Përcaktoni çfarë kthen lidhësi

Rrjedha duhet të çojë tashmë drejt serverit SFTP. Për HTTP CONNECT, kjo do të thotë që proxy ka pranuar destinacionin dhe titujt e plotë të përgjigjes së proxy janë konsumuar. Për SOCKS, negociatat përkatëse duhet të kenë përfunduar me sukses. Çdo bajt SSH i lexuar tashmë përtej këtij kufiri duhet të mbetet i disponueshëm për implementimin SSH.

Në atë pikë phpseclib kryen shkëmbimin SSH dhe nis SFTP mbi të njëjtën rrjedhë. Aplikacioni mund të përdorë operacionet e tij të zakonshme SFTP. Ndërfaqja e konstruktorit shmang një nënklasë aplikacioni detyra e së cilës do të ishte zëvendësimi i fushave të brendshme të socket-it.

Artikuj të ngjashëm