Предаване на установен тунел HTTP CONNECT към Paramiko
Свържете Paramiko през разрешен маршрут HTTP CONNECT, като запазвате проверката на хост ключа на SSH.
След като помощникът за 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 вместо вас. Преди да го върне, конекторът трябва да:
- Се свърже с проксито и изпрати валидна заявка CONNECT към дестинацията.
- Завърши всяка поддържана автентикация на проксито и провери успешен статус на тунела.
- Прочете целия раздел със заглавки на проксито, като обработва частични четения и запазва байтовете отвъд границата.
- Ограничи настройката и затвори отхвърлените/грешните сокети чрез пътя си за почистване.
Използвайте поддържан конектор за тази работа. Търсенето на английска фраза за успех в един приемен буфер пропуска разделени редове за статус, променлив текст за причина и непълни заглавки. Успешната TCP връзка с проксито не е приетият SSH тунел.
Проксито трябва да разрешава поискания SSH порт; разрешението за уеб сърфиране не установява достъп CONNECT до порт 22. 407 възниква преди влизането в SSH, докато неуспехът на SSH акаунт възниква след тунела. Дръжте тези акаунти отделно.
Затворете SSH клиента и ресурсите, притежавани от конектора, когато приключите. Спирането на четенията от дадена задача само по себе си не затваря жива връзка.