phpseclib 3 একটি খোলা স্ট্রিম রিসোর্স গ্রহণ করে যেখানে এর SSH/SFTP কনস্ট্রাক্টর সাধারণত একটি হোস্টনেম পায়। এটি এমন একটি সংযোগের জন্য পাবলিক হ্যান্ডঅফ পয়েন্ট যা ইতিমধ্যে প্রক্সির মধ্য দিয়ে চলছে।

প্রথমে কানেক্টরটি প্রকৃত SFTP সার্ভার ও পোর্টে একটি HTTP CONNECT বা SOCKS টানেল স্থাপন করে। তারপর প্রতিষ্ঠিত স্ট্রিমটি 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 অপারেশন ব্যবহার করতে পারে। কনস্ট্রাক্টর ইন্টারফেস এমন একটি অ্যাপ্লিকেশন সাবক্লাস এড়িয়ে যায় যার কাজ অভ্যন্তরীণ সকেট ফিল্ড প্রতিস্থাপন করা।

সম্পর্কিত নিবন্ধ