Når en HTTP CONNECT-hjælper har returneret en tunnel til den tilsigtede SSH-server, skal du give den stream til 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.

Erstat eksempelværten, og indlæs udrulningens korrekte known-hosts-data. tunnel skal allerede føre til den samme server. Det værtsnavn, der gives til connect, identificerer SSH-værtsnøglen, ikke proxyen.

sock-grænsefladen accepterer en åben socket eller et socketlignende objekt. Den forhandler ikke HTTP for dig. Før den returneres, skal connectoren:

  1. Forbinde til proxyen og sende en gyldig CONNECT-anmodning til destinationen.
  2. Fuldføre enhver understøttet proxygodkendelse og validere en vellykket tunnelstatus.
  3. Læse hele proxy-headerafsnittet, håndtere delvise læsninger og bevare bytes ud over grænsen.
  4. Begrænse opsætningen og lukke afviste/fejlbehæftede sockets gennem sin oprydningssti.

Brug en vedligeholdt connector til det arbejde. At søge efter en engelsk succesfrase i én modtagelsesbuffer overser opdelte statuslinjer, variabel årsagstekst og ufuldstændige headere. En vellykket proxy-TCP-forbindelse er ikke den accepterede SSH-tunnel.

Proxyen skal tillade den ønskede SSH-port; webbladsstilladelse etablerer ikke CONNECT-adgang til port 22. En 407 opstår før SSH-login, mens en SSH-kontofejl opstår efter tunnelen. Hold disse konti adskilt.

Luk SSH-klienten og de ressourcer, connectoren ejer, når du er færdig. At en opgave stopper sine læsninger, lukker ikke i sig selv en aktiv forbindelse.

Relaterede artikler