Nakon što HTTP CONNECT pomoćnik vrati tunel do željenog SSH poslužitelja, predajte taj tok Paramiku:

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.

Zamijenite primjer hosta i učitajte ispravne known-hosts podatke implementacije. tunnel već mora voditi do istog poslužitelja. Ime hosta proslijeđeno u connect identificira SSH ključ hosta, a ne proxy.

sock sučelje prihvaća otvoreni socket ili socketu sličan objekt. Ono ne pregovara HTTP umjesto vas. Prije nego što ga vrati, konektor mora:

  1. Povezati se s proxyjem i poslati valjan CONNECT zahtjev za odredište.
  2. Dovršiti svaku podržanu proxy autentifikaciju i provjeriti uspješan status tunela.
  3. Pročitati cijelu sekciju proxy zaglavlja, obrađujući djelomična čitanja i čuvajući bajtove iza granice.
  4. Ograničiti postavljanje i zatvoriti odbijene/neispravne sockete kroz svoju putanju čišćenja.

Za taj posao koristite održavani konektor. Traženje engleske fraze uspjeha u jednom prijemnom međuspremniku promašuje podijeljene statusne retke, promjenjiv tekst razloga i nepotpuna zaglavlja. Uspješna proxy TCP veza nije prihvaćeni SSH tunel.

Proxy mora dopustiti traženi SSH port; dopuštenje za web pregledavanje ne uspostavlja CONNECT pristup portu 22. 407 se javlja prije SSH prijave, dok se neuspjeh SSH računa javlja nakon tunela. Držite te račune odvojeno.

Zatvorite SSH klijenta i resurse koje posjeduje konektor kada završite. Zaustavljanje čitanja u zadatku samo po sebi ne zatvara živu vezu.

Povezani članci