След като помощникът за HTTP CONNECT върне тунел към желания SSH сървър, предайте този поток на 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.

Заменете примерния хост и заредете правилните данни за known-hosts на внедряването. tunnel вече трябва да води към същия сървър. Името на хоста, подадено на connect, идентифицира хост ключа на SSH, а не проксито.

Интерфейсът sock приема отворен сокет или подобен на сокет обект. Той не договаря HTTP вместо вас. Преди да го върне, конекторът трябва да:

  1. Се свърже с проксито и изпрати валидна заявка CONNECT към дестинацията.
  2. Завърши всяка поддържана автентикация на проксито и провери успешен статус на тунела.
  3. Прочете целия раздел със заглавки на проксито, като обработва частични четения и запазва байтовете отвъд границата.
  4. Ограничи настройката и затвори отхвърлените/грешните сокети чрез пътя си за почистване.

Използвайте поддържан конектор за тази работа. Търсенето на английска фраза за успех в един приемен буфер пропуска разделени редове за статус, променлив текст за причина и непълни заглавки. Успешната TCP връзка с проксито не е приетият SSH тунел.

Проксито трябва да разрешава поискания SSH порт; разрешението за уеб сърфиране не установява достъп CONNECT до порт 22. 407 възниква преди влизането в SSH, докато неуспехът на SSH акаунт възниква след тунела. Дръжте тези акаунти отделно.

Затворете SSH клиента и ресурсите, притежавани от конектора, когато приключите. Спирането на четенията от дадена задача само по себе си не затваря жива връзка.

Подобни статии