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 գործողությունները։ Կոնստրուկտորի ինտերֆեյսը խուսափում է հավելվածի ենթադասից, որի խնդիրն էր փոխարինել ներքին սոքեթ դաշտերը։