SFTP phpseclib 3 via un flux proxy déjà établi
Utiliser le constructeur public de flux de phpseclib 3 pour lancer SFTP à travers un tunnel HTTP ou SOCKS déjà établi.
phpseclib 3 accepte une ressource de flux ouverte là où son constructeur SSH/SFTP recevrait autrement un nom d'hôte. C'est le point de passage public pour une connexion déjà transportée par un proxy.
D'abord, le connecteur établit un tunnel HTTP CONNECT ou SOCKS vers le vrai serveur SFTP et son port. Ensuite, le flux établi est transmis à 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 est un flux déjà connecté, pas une URL de proxy. $expectedHostKey est la chaîne de clé publique de confiance du serveur, obtenue via le processus de provisionnement de l'application, au format renvoyé par phpseclib. Le justificatif de connexion peut être le mot de passe pris en charge ou un objet de clé chargé choisi par l'application.
Définir ce que renvoie le connecteur
Le flux doit déjà mener au serveur SFTP. Pour HTTP CONNECT, cela signifie que le proxy a accepté la destination et que les en-têtes complets de réponse du proxy ont été consommés. Pour SOCKS, la négociation concernée doit s'être terminée avec succès. Tout octet SSH déjà lu au-delà de cette limite doit rester disponible pour l'implémentation SSH.
À ce stade, phpseclib effectue l'échange SSH et démarre SFTP sur le même flux. L'application peut utiliser ses opérations SFTP habituelles. L'interface du constructeur évite une sous-classe applicative dont le rôle serait de remplacer des champs internes de socket.