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