Transmiterea unui tunel HTTP CONNECT stabilit către Paramiko
Conectați Paramiko printr-o rută HTTP CONNECT autorizată, păstrând verificarea cheii de gazdă SSH.
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ă:
- Se conecteze la proxy și să trimită o cerere CONNECT validă pentru destinație.
- Finalizeze orice autentificare proxy acceptată și să valideze o stare de tunel reușită.
- Citească întreaga secțiune de antete a proxy-ului, gestionând citirile parțiale și păstrând octeții dincolo de limită.
- 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ă.