När en HTTP CONNECT-hjälpare har returnerat en tunnel till den avsedda SSH-servern, ge den strömmen till 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.

Byt ut exempelvärden och läs in distributionens korrekta known-hosts-data. tunnel måste redan leda till samma server. Värdnamnet som skickas till connect identifierar SSH-värdnyckeln, inte proxyn.

sock-gränssnittet accepterar en öppen socket eller ett socketliknande objekt. Det förhandlar inte HTTP åt dig. Innan det returneras måste anslutaren:

  1. Ansluta till proxyn och skicka en giltig CONNECT-begäran för målet.
  2. Slutföra allt stött proxyautentisering och validera en lyckad tunnelstatus.
  3. Läsa hela proxyhuvudavsnittet, hantera partiella läsningar och bevara byte bortom gränsen.
  4. Begränsa uppsättningen och stänga avvisade/felaktiga sockets via sin städväg.

Använd en underhållen anslutare för det arbetet. Att söka efter en engelsk framgångsfras i en enda mottagningsbuffert missar delade statusrader, variabel orsakstext och ofullständiga huvuden. En lyckad proxy-TCP-anslutning är inte den accepterade SSH-tunneln.

Proxyn måste tillåta den begärda SSH-porten; webbläsartillstånd etablerar inte CONNECT-åtkomst till port 22. En 407 inträffar före SSH-inloggning, medan ett SSH-kontofel inträffar efter tunneln. Håll dessa konton åtskilda.

Stäng SSH-klienten och de resurser anslutaren äger när du är klar. Att en uppgift slutar läsa stänger inte i sig en aktiv anslutning.

Relaterade artiklar