SFTP amb phpseclib 3 a través d'un flux proxy establert
Utilitzeu el constructor públic de flux de phpseclib 3 per iniciar SFTP a través d'un túnel HTTP o SOCKS ja establert.
phpseclib 3 accepta un recurs de flux obert allà on el seu constructor SSH/SFTP rebria normalment un nom d'amfitrió. Aquest és el punt de lliurament públic per a una connexió que ja viatja a través d'un proxy.
Primer, el connector estableix un túnel HTTP CONNECT o SOCKS cap al servidor SFTP real i el seu port. Després, passeu el flux establert a 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 és un flux ja connectat, no una URL de proxy. $expectedHostKey és la cadena de clau pública de confiança del servidor, obtinguda mitjançant el procés d'aprovisionament de l'aplicació, en el format que retorna phpseclib. La credencial d'inici de sessió pot ser la contrasenya admesa o un objecte de clau carregat triat per l'aplicació.
Definiu què retorna el connector
El flux ja ha de portar al servidor SFTP. Per a HTTP CONNECT, això significa que el proxy ha acceptat la destinació i que s'han consumit les capçaleres de resposta completes del proxy. Per a SOCKS, la negociació corresponent s'ha d'haver completat correctament. Qualsevol byte SSH ja llegit més enllà d'aquest límit ha de romandre disponible per a la implementació SSH.
En aquest moment, phpseclib fa l'intercanvi SSH i inicia SFTP sobre el mateix flux. L'aplicació pot utilitzar les seves operacions SFTP habituals. La interfície del constructor evita una subclasse d'aplicació la feina de la qual seria substituir camps interns de socket.