Передача встановленого тунелю 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 і ресурси, якими володіє з’єднувач. Зупинка читань завданням сама по собі не закриває активне з’єднання.