phpseclib 3 SFTP egy meglévő proxy streamen keresztül
Használja a phpseclib 3 nyilvános stream-konstruktorát, hogy SFTP-t indítson egy már létrehozott HTTP- vagy SOCKS-alagúton.
A phpseclib 3 elfogad egy nyitott stream-erőforrást ott, ahol az SSH/SFTP-konstruktora egyébként gazdagépnevet kapna. Ez a nyilvános átadási pont egy olyan kapcsolat számára, amely már proxyn keresztül halad.
Először a csatlakozó HTTP CONNECT- vagy SOCKS-alagutat hoz létre a tényleges SFTP-kiszolgálóhoz és annak portjához. Ezután a létrehozott streamet át kell adni az SFTP-nek:
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 egy már csatlakoztatott stream, nem proxy URL. $expectedHostKey a kiszolgáló megbízható nyilvános kulcsú sztringje, amelyet az alkalmazás előkészítési folyamata során szereztek be, a phpseclib által visszaadott formátumban. A bejelentkezési hitelesítő adat lehet a támogatott jelszó vagy egy betöltött kulcsobjektum, amelyet az alkalmazás kiválaszt.
Határozza meg, mit ad vissza a csatlakozó
A streamnek már az SFTP-kiszolgálóhoz kell vezetnie. HTTP CONNECT esetén ez azt jelenti, hogy a proxy elfogadta a célt, és a proxy teljes válaszfejlécei felhasználásra kerültek. SOCKS esetén a vonatkozó egyeztetésnek sikeresen be kell fejeződnie. A határon túl már beolvasott SSH-bájtoknak elérhetőnek kell maradniuk az SSH-implementáció számára.
Ezen a ponton a phpseclib végrehajtja az SSH-cserét, és SFTP-t indít ugyanazon a streamen. Az alkalmazás használhatja szokásos SFTP-műveleteit. A konstruktor felülete elkerüli azt az alkalmazás-alkosztályt, amelynek feladata a belső socket-mezők lecserélése.