Passer un tunnel HTTP CONNECT établi à Paramiko
Connectez Paramiko via une route HTTP CONNECT autorisée tout en conservant la vérification de la clé d’hôte SSH.
Une fois qu’un assistant HTTP CONNECT a renvoyé un tunnel vers le serveur SSH visé, remettez ce flux à Paramiko :
with paramiko.SSHClient() as client:
client.load_system_host_keys()
client.connect('ssh.example.com',
username='operator',
sock=tunnel,
banner_timeout=10,
auth_timeout=10)
# Use the verified SSH connection.Remplacez l’hôte d’exemple et chargez les données known-hosts correctes du déploiement. tunnel doit déjà mener à ce même serveur. Le nom d’hôte transmis à connect identifie la clé d’hôte SSH, pas le proxy.
L’interface sock accepte une socket ouverte ou un objet de type socket. Elle ne négocie pas HTTP à votre place. Avant de la renvoyer, le connecteur doit :
- Se connecter au proxy et envoyer une requête CONNECT valide pour la destination.
- Terminer toute authentification proxy prise en charge et valider un état de tunnel réussi.
- Lire toute la section d’en-têtes du proxy, en gérant les lectures partielles et en conservant les octets au-delà de la limite.
- Borner la configuration et fermer les sockets rejetées/erronées via son chemin de nettoyage.
Utilisez un connecteur maintenu pour ce travail. Chercher une phrase de succès en anglais dans un seul tampon de réception manque les lignes d’état fractionnées, le texte de raison variable et les en-têtes incomplets. Une connexion TCP proxy réussie n’est pas le tunnel SSH accepté.
Le proxy doit autoriser le port SSH demandé ; une autorisation de navigation web n’établit pas d’accès CONNECT au port 22. Un 407 survient avant la connexion SSH, tandis qu’un échec de compte SSH survient après le tunnel. Gardez ces comptes séparés.
Fermez le client SSH et les ressources détenues par le connecteur lorsque vous avez terminé. L’arrêt des lectures d’une tâche ne ferme pas à lui seul une connexion active.