phpseclib 3 accepterer en åben strømressource, hvor dens SSH/SFTP-konstruktør ellers ville modtage et værtsnavn. Det er det offentlige overdragelsespunkt for en forbindelse, der allerede føres gennem en proxy.

Først etablerer connectoren en HTTP CONNECT- eller SOCKS-tunnel til den faktiske SFTP-server og port. Derefter sendes den etablerede strøm 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 forbundet strøm, ikke en proxy-URL. $expectedHostKey er serverens betroede offentlige nøglestreng, hentet gennem applikationens provisioning-proces, i det format phpseclib returnerer. Loginoplysningen kan være den understøttede adgangskode eller et indlæst nøgleobjekt, som applikationen vælger.

Definer, hvad connectoren returnerer

Strømmen skal allerede føre til SFTP-serveren. For HTTP CONNECT betyder det, at proxyen har accepteret destinationen, og at de komplette proxy-svarheadere er forbrugt. For SOCKS skal den relevante forhandling være gennemført med succes. Eventuelle SSH-bytes, der allerede er læst ud over denne grænse, skal forblive tilgængelige for SSH-implementeringen.

På det tidspunkt udfører phpseclib SSH-udvekslingen og starter SFTP over den samme strøm. Applikationen kan bruge sine sædvanlige SFTP-operationer. Konstruktørgrænsefladen undgår en applikationsunderklasse, hvis opgave ville være at erstatte interne socket-felter.

Relaterede artikler