phpseclib 3 godtar en åpen strømressurs der SSH/SFTP-konstruktøren ellers ville fått et vertsnavn. Det er det offentlige overleveringspunktet for en tilkobling som allerede føres gjennom en proxy.

Først etablerer connectoren en HTTP CONNECT- eller SOCKS-tunnel til den faktiske SFTP-serveren og porten. Deretter sendes den etablerte strømmen til 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 er en allerede tilkoblet strøm, ikke en proxy-URL. $expectedHostKey er serverens klarerte offentlige nøkkelstreng, hentet gjennom applikasjonens klargjøringsprosess, i formatet phpseclib returnerer. Påloggingslegitimasjonen kan være det støttede passordet eller et innlastet nøkkelobjekt som applikasjonen velger.

Definer hva connectoren returnerer

Strømmen må allerede lede til SFTP-serveren. For HTTP CONNECT betyr det at proxyen har godtatt målet og at de komplette proxy-svarhodene er forbrukt. For SOCKS må den relevante forhandlingen være fullført. Eventuelle SSH-byte som allerede er lest forbi denne grensen, må forbli tilgjengelige for SSH-implementasjonen.

På det tidspunktet utfører phpseclib SSH-utvekslingen og starter SFTP over den samme strømmen. Applikasjonen kan bruke sine vanlige SFTP-operasjoner. Konstruktørgrensesnittet unngår en applikasjonsunderklasse hvis oppgave ville være å erstatte interne socket-felt.

Relaterte artikler