Након што HTTP CONNECT помоћник врати тунел до жељеног SSH сервера, предајте тај ток Paramiku:

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.

Замените пример хоста и учитајте исправне known-hosts податке имплементације. tunnel већ мора да води до истог сервера. Име хоста прослеђено у connect идентификује SSH кључ хоста, а не прокси.

sock интерфејс прихвата отворени сокет или објекат сличан сокету. Он не преговара HTTP уместо вас. Пре него што га врати, конектор мора:

  1. Да се повеже са проксијем и пошаље ваљан CONNECT захтев за одредиште.
  2. Да заврши сваку подржану прокси аутентификацију и провери успешан статус тунела.
  3. Да прочита целу секцију прокси заглавља, обрађујући делимична читања и чувајући бајтове иза границе.
  4. Да ограничи подешавање и затвори одбијене/неисправне сокете кроз своју путању за чишћење.

За тај посао користите одржавани конектор. Тражење енглеске фразе успеха у једном пријемном баферу промашује подељене статусне линије, променљив текст разлога и непотпуна заглавља. Успешна прокси TCP веза није прихваћени SSH тунел.

Прокси мора да дозволи тражени SSH порт; дозвола за веб прегледање не успоставља CONNECT приступ порту 22. 407 се јавља пре SSH пријаве, док се неуспех SSH рачуна јавља након тунела. Држите те рачуне одвојено.

Затворите SSH клијента и ресурсе које поседује конектор када завршите. Заустављање читања у задатку само по себи не затвара живу везу.

Повезани чланци