Gdy pomocnik HTTP CONNECT zwróci tunel do zamierzonego serwera SSH, przekaż ten strumień do 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.

Zastąp przykładowy host i wczytaj prawidłowe dane known-hosts wdrożenia. tunnel musi już prowadzić do tego samego serwera. Nazwa hosta przekazana do connect identyfikuje klucz hosta SSH, a nie proxy.

Interfejs sock przyjmuje otwarte gniazdo lub obiekt gniazdo-podobny. Nie negocjuje HTTP za Ciebie. Przed zwróceniem go łącznik musi:

  1. Połączyć się z proxy i wysłać prawidłowe żądanie CONNECT do miejsca docelowego.
  2. Zakończyć każde obsługiwane uwierzytelnianie proxy i potwierdzić pomyślny stan tunelu.
  3. Odczytać całą sekcję nagłówków proxy, obsługując częściowe odczyty i zachowując bajty poza granicą.
  4. Ograniczyć konfigurację i zamknąć odrzucone/błędne gniazda przez swoją ścieżkę czyszczenia.

Do tej pracy używaj utrzymywanego łącznika. Szukanie angielskiej frazy sukcesu w jednym buforze odbioru pomija podzielone wiersze statusu, zmienny tekst przyczyny i niekompletne nagłówki. Udane połączenie TCP przez proxy nie jest akceptowanym tunelem SSH.

Proxy musi zezwalać na żądany port SSH; uprawnienie do przeglądania stron nie ustanawia dostępu CONNECT do portu 22. 407 występuje przed logowaniem SSH, natomiast błąd konta SSH występuje po tunelu. Trzymaj te konta oddzielnie.

Po zakończeniu zamknij klienta SSH i zasoby należące do łącznika. Zatrzymanie odczytów przez zadanie samo w sobie nie zamyka aktywnego połączenia.

Powiązane artykuły