phpseclib 3 SFTP gennem en etableret proxystrøm
Brug phpseclib 3's offentlige strømkonstruktør til at starte SFTP gennem en etableret HTTP- eller SOCKS-tunnel.
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.