SFTP con phpseclib 3 a través dun fluxo proxy establecido
Use o construtor público de fluxos de phpseclib 3 para iniciar SFTP a través dun túnel HTTP ou SOCKS xa establecido.
phpseclib 3 acepta un recurso de fluxo aberto alí onde o seu construtor SSH/SFTP recibiría doutro xeito un nome de host. Ese é o punto de entrega público para unha conexión que xa viaxa a través dun proxy.
Primeiro, o conector establece un túnel HTTP CONNECT ou SOCKS cara ao servidor SFTP real e o seu porto. Despois, pase o fluxo establecido 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 é un fluxo xa conectado, non un URL de proxy. $expectedHostKey é a cadea de clave pública de confianza do servidor, obtida mediante o proceso de aprovisionamento da aplicación, no formato que devolve phpseclib. A credencial de inicio de sesión pode ser o contrasinal admitido ou un obxecto de clave cargado que elixa a aplicación.
Defina que devolve o conector
O fluxo xa debe levar ao servidor SFTP. Para HTTP CONNECT, isto significa que o proxy aceptou o destino e que se consumiron as cabeceiras de resposta completas do proxy. Para SOCKS, a negociación correspondente debe terse completado correctamente. Calquera byte SSH xa lido máis alá dese límite debe seguir dispoñible para a implementación SSH.
Nese punto phpseclib realiza o intercambio SSH e inicia SFTP sobre o mesmo fluxo. A aplicación pode usar as súas operacións SFTP habituais. A interface do construtor evita unha subclase de aplicación cuxa tarefa sería substituír campos internos do socket.