phpseclib 3 SFTP genom en etablerad proxyström
Använd phpseclib 3:s offentliga strömkonstruktor för att starta SFTP genom en etablerad HTTP- eller SOCKS-tunnel.
phpseclib 3 accepterar en öppen strömresurs där dess SSH/SFTP-konstruktor annars skulle få ett värdnamn. Det är den offentliga överlämningspunkten för en anslutning som redan transporteras genom en proxy.
Först upprättar anslutaren en HTTP CONNECT- eller SOCKS-tunnel till den faktiska SFTP-servern och dess port. Sedan skickas den etablerade strömmen till 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 är en redan ansluten ström, inte en proxy-URL. $expectedHostKey är serverns betrodda offentliga nyckelsträng, hämtad via applikationens provisioneringsprocess, i det format som phpseclib returnerar. Inloggningsuppgiften kan vara det stödda lösenordet eller ett inläst nyckelobjekt som applikationen väljer.
Definiera vad anslutaren returnerar
Strömmen måste redan leda till SFTP-servern. För HTTP CONNECT innebär det att proxyn har accepterat destinationen och att de fullständiga proxy-svarshuvudena har förbrukats. För SOCKS måste den relevanta förhandlingen ha slutförts. Eventuella SSH-byten som redan lästs förbi den gränsen måste förbli tillgängliga för SSH-implementeringen.
Vid den punkten utför phpseclib SSH-utbytet och startar SFTP över samma ström. Applikationen kan använda sina vanliga SFTP-operationer. Konstruktorns gränssnitt undviker en applikationsunderklass vars uppgift skulle vara att ersätta interna socketfält.