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.

Artigos relacionados