Sobald ein HTTP-CONNECT-Helfer einen Tunnel zum vorgesehenen SSH-Server zurückgegeben hat, übergeben Sie diesen Stream an 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.

Ersetzen Sie den Beispielhost und laden Sie die korrekten known-hosts-Daten der Bereitstellung. tunnel muss bereits zu demselben Server führen. Der an connect übergebene Hostname identifiziert den SSH-Hostschlüssel, nicht den Proxy.

Die sock-Schnittstelle akzeptiert einen offenen Socket oder ein socketähnliches Objekt. Sie handelt HTTP nicht für Sie aus. Vor der Rückgabe muss der Connector:

  1. Sich mit dem Proxy verbinden und eine gültige CONNECT-Anfrage für das Ziel senden.
  2. Jede unterstützte Proxy-Authentifizierung abschließen und einen erfolgreichen Tunnelstatus prüfen.
  3. Den gesamten Proxy-Headerabschnitt lesen, Teil-Lesevorgänge behandeln und Bytes jenseits der Grenze bewahren.
  4. Den Aufbau begrenzen und abgelehnte/fehlerhafte Sockets über seinen Bereinigungspfad schließen.

Verwenden Sie für diese Arbeit einen gepflegten Connector. Die Suche nach einer englischen Erfolgsphrase in einem Empfangspuffer übersieht geteilte Statuszeilen, variablen Begründungstext und unvollständige Header. Eine erfolgreiche Proxy-TCP-Verbindung ist nicht der akzeptierte SSH-Tunnel.

Der Proxy muss den angeforderten SSH-Port zulassen; eine Web-Browsing-Berechtigung begründet keinen CONNECT-Zugang zu Port 22. Ein 407 tritt vor der SSH-Anmeldung auf, während ein SSH-Kontofehler nach dem Tunnel auftritt. Halten Sie diese Konten getrennt.

Schließen Sie den SSH-Client und die vom Connector gehaltenen Ressourcen, wenn Sie fertig sind. Dass eine Aufgabe ihre Lesevorgänge einstellt, schließt nicht selbst eine aktive Verbindung.

Ähnliche Artikel