SFTP con phpseclib 3 attraverso un flusso proxy stabilito
Usa il costruttore pubblico di flusso di phpseclib 3 per avviare SFTP attraverso un tunnel HTTP o SOCKS già stabilito.
phpseclib 3 accetta una risorsa di flusso aperta dove il suo costruttore SSH/SFTP riceverebbe altrimenti un nome host. È il punto di consegna pubblico per una connessione già trasportata attraverso un proxy.
Innanzitutto, il connettore stabilisce un tunnel HTTP CONNECT o SOCKS verso il server SFTP reale e la sua porta. Poi passa il flusso stabilito 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 flusso già connesso, non un URL proxy. $expectedHostKey è la stringa di chiave pubblica attendibile del server, ottenuta tramite il processo di provisioning dell'applicazione, nel formato restituito da phpseclib. La credenziale di accesso può essere la password supportata o un oggetto chiave caricato scelto dall'applicazione.
Definisci cosa restituisce il connettore
Il flusso deve già condurre al server SFTP. Per HTTP CONNECT, ciò significa che il proxy ha accettato la destinazione e che le intestazioni di risposta complete del proxy sono state consumate. Per SOCKS, la negoziazione pertinente deve essere completata con successo. Eventuali byte SSH già letti oltre quel confine devono rimanere disponibili all'implementazione SSH.
A quel punto phpseclib esegue lo scambio SSH e avvia SFTP sullo stesso flusso. L'applicazione può usare le sue normali operazioni SFTP. L'interfaccia del costruttore evita una sottoclasse dell'applicazione il cui compito sarebbe sostituire campi interni del socket.