SFTP ของ phpseclib 3 ผ่านสตรีมพร็อกซีที่สร้างไว้แล้ว
ใช้คอนสตรักเตอร์สตรีมสาธารณะของ 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 ตามปกติได้ อินเทอร์เฟซของคอนสตรักเตอร์ช่วยหลีกเลี่ยงคลาสย่อยของแอปพลิเคชันที่มีหน้าที่แทนที่ฟิลด์ซ็อกเก็ตภายใน