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 הרגילות שלו. ממשק המבנה מונע תת-מחלקה של היישום שתפקידה להחליף שדות סוקט פנימיים.

מאמרים קשורים