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 خود استفاده کند. رابط سازنده از زیرکلاس برنامه‌ای که وظیفه‌اش جایگزینی فیلدهای داخلی سوکت است اجتناب می‌کند.

مقالات مرتبط