După ce un ajutor HTTP CONNECT a returnat un tunel către serverul SSH dorit, dați acel flux lui 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.

Înlocuiți gazda din exemplu și încărcați datele known-hosts corecte ale implementării. tunnel trebuie să ducă deja la același server. Numele de gazdă transmis lui connect identifică cheia de gazdă SSH, nu proxy-ul.

Interfața sock acceptă un socket deschis sau un obiect asemănător unui socket. Nu negociază HTTP în locul dumneavoastră. Înainte de a-l returna, conectorul trebuie să:

  1. Se conecteze la proxy și să trimită o cerere CONNECT validă pentru destinație.
  2. Finalizeze orice autentificare proxy acceptată și să valideze o stare de tunel reușită.
  3. Citească întreaga secțiune de antete a proxy-ului, gestionând citirile parțiale și păstrând octeții dincolo de limită.
  4. Limiteze configurarea și să închidă socketurile respinse/eronate prin calea sa de curățare.

Folosiți un conector întreținut pentru această lucrare. Căutarea unei expresii englezești de succes într-un singur buffer de recepție ratează liniile de stare divizate, textul variabil al motivului și antetele incomplete. O conexiune TCP de proxy reușită nu este tunelul SSH acceptat.

Proxy-ul trebuie să permită portul SSH solicitat; permisiunea de navigare web nu stabilește acces CONNECT la portul 22. Un 407 apare înainte de autentificarea SSH, în timp ce o eroare de cont SSH apare după tunel. Țineți acele conturi separate.

Închideți clientul SSH și resursele deținute de conector când ați terminat. Faptul că o sarcină își oprește citirile nu închide singur o conexiune activă.

Articole similare