يقبل 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 المعتادة. تتجنب واجهة المُنشئ فئة فرعية من التطبيق مهمتها استبدال حقول المقبس الداخلية.

مقالات ذات صلة