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.

Relaterade artiklar