Un cop un auxiliar HTTP CONNECT ha retornat un túnel cap al servidor SSH previst, passeu aquest flux a 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.

Substituïu l’amfitrió d’exemple i carregueu les dades known-hosts correctes del desplegament. tunnel ja ha de conduir a aquest mateix servidor. El nom d’amfitrió que es passa a connect identifica la clau d’amfitrió SSH, no el proxy.

La interfície sock accepta un sòcol obert o un objecte semblant a un sòcol. No negocia HTTP per vosaltres. Abans de retornar-lo, el connector ha de:

  1. Connectar-se al proxy i enviar una sol·licitud CONNECT vàlida per al destí.
  2. Completar qualsevol autenticació de proxy admesa i validar un estat de túnel correcte.
  3. Llegir tota la secció de capçaleres del proxy, gestionant lectures parcials i conservant els bytes més enllà del límit.
  4. Limitar la configuració i tancar els sòcols rebutjats/errònis mitjançant el seu camí de neteja.

Feu servir un connector mantingut per a aquesta feina. Cercar una frase d’èxit en anglès en un sol búfer de recepció passa per alt línies d’estat dividides, text de motiu variable i capçaleres incompletes. Una connexió TCP de proxy correcta no és el túnel SSH acceptat.

El proxy ha de permetre el port SSH sol·licitat; el permís de navegació web no estableix accés CONNECT al port 22. Un 407 es produeix abans de l’inici de sessió SSH, mentre que un error de compte SSH es produeix després del túnel. Manteniu aquests comptes separats.

Tanqueu el client SSH i els recursos propietat del connector quan hàgiu acabat. Que una tasca aturi les seves lectures no tanca per si mateix una connexió activa.

Articles relacionats