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

Падобныя артыкулы