Το 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, η σχετική διαπραγμάτευση πρέπει να έχει ολοκληρωθεί επιτυχώς. Τυχόν byte SSH που έχουν ήδη διαβαστεί πέρα από αυτό το όριο πρέπει να παραμένουν διαθέσιμα στην υλοποίηση SSH.

Σε εκείνο το σημείο το phpseclib εκτελεί την ανταλλαγή SSH και ξεκινά SFTP πάνω στην ίδια ροή. Η εφαρμογή μπορεί να χρησιμοποιήσει τις συνηθισμένες λειτουργίες SFTP. Η διεπαφή του κατασκευαστή αποφεύγει μια υποκλάση εφαρμογής της οποίας το έργο θα ήταν να αντικαταστήσει εσωτερικά πεδία υποδοχής.

Σχετικά άρθρα