Unha vez que un axudante HTTP CONNECT devolveu un túnel ao servidor SSH previsto, entregue ese fluxo 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.

Substitúa o host do exemplo e cargue os datos known-hosts correctos do despregamento. tunnel xa debe conducir a ese mesmo servidor. O nome de host que se pasa a connect identifica a clave de host SSH, non o proxy.

A interface sock acepta un socket aberto ou un obxecto similar a un socket. Non negocia HTTP por vostede. Antes de devolvelo, o conector debe:

  1. Conectarse ao proxy e enviar unha solicitude CONNECT válida para o destino.
  2. Completar calquera autenticación de proxy admitida e validar un estado de túnel correcto.
  3. Ler toda a sección de cabeceiras do proxy, xestionando lecturas parciais e conservando os bytes máis alá do límite.
  4. Acoutar a configuración e pechar os sockets rexeitados/erróneos mediante a súa ruta de limpeza.

Utilice un conector mantido para ese traballo. Buscar unha frase de éxito en inglés nun só búfer de recepción pasa por alto liñas de estado divididas, texto de motivo variable e cabeceiras incompletas. Unha conexión TCP de proxy correcta non é o túnel SSH aceptado.

O proxy debe permitir o porto SSH solicitado; o permiso de navegación web non establece acceso CONNECT ao porto 22. Un 407 ocorre antes do inicio de sesión SSH, mentres que un fallo de conta SSH ocorre despois do túnel. Manteña as contas separadas.

Pecha o cliente SSH e os recursos propiedade do conector cando remate. Que unha tarefa deteña as súas lecturas non pecha por si mesmo unha conexión activa.

Artigos relacionados