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 ოპერაციები. კონსტრუქტორის ინტერფეისი თავიდან იცილებს აპლიკაციის ქვეკლასს, რომლის ამოცანა შიდა სოკეტის ველების შეცვლა იქნებოდა.