Удалённые команды Fabric идут через SSH. Чтобы провести это SSH-подключение через сервер SOCKS, дайте Fabric коннектор, который говорит на SOCKS и возвращает байтовый поток места назначения.

API Connection, появившийся в Fabric 2, принимает строку команды в качестве своего gateway. Fabric использует эту строку как ProxyCommand. Если есть совместимый с OpenBSD nc, поддерживающий свои параметры прокси, конфигурация может выглядеть так:

from fabric import Connection

connection = Connection(
    "app.example.net",
    user="deploy",
    gateway="nc -X 5 -x proxy.example.net:1080 %h %p",
)

В этом примере используется обычный порт SSH, 22. -X 5 коннектора выбирает SOCKS5, а -x указывает конечную точку прокси. Заполнители хоста и порта задают место назначения SSH. Для публичного места назначения SSH конечная точка без аутентификации из списка SOCKS5-прокси может заполнить адрес прокси, если она разрешает это место назначения и порт. Настройте команду по параметрам фактического коннектора, установленного на машине; программы с именем nc не все предоставляют одинаковый интерфейс.

Коннектор работает локально, там, где работает Fabric. Серверу приложения не нужен этот помощник только потому, что он является местом назначения SSH. После установления потока Fabric по-прежнему проводит согласование SSH и аутентифицирует учётную запись deploy на app.example.net. Любая аутентификация, требуемая сервером SOCKS, относится к коннектору и должна им поддерживаться.

Fabric также может читать ProxyCommand из конфигурации SSH. Это бывает удобно, когда один и тот же маршрут используют несколько инструментов SSH. Используйте одно предназначенное определение шлюза для соединения, вместо того чтобы сочетать шлюз в стиле команды с отдельным шлюзом промежуточного узла для того же места назначения.

Когда посредником является сервер SSH

Объект Connection из Fabric, переданный как gateway, означает другое: Fabric подключается к этому SSH-шлюзу и запрашивает канал до конечного узла. Используйте эту форму для промежуточного узла SSH. Слушатель SOCKS не является сервером SSH, поэтому ему нужен коннектор в стиле команды выше.

У этого выбора транспорта есть и явная граница. Он маршрутизирует SSH-подключение Fabric. Команда, выполненная на удалённом узле и затем загружающая репозиторий или пакет, создаёт новое исходящее соединение с этого узла, согласно собственной конфигурации прокси этой программы.

Похожие статьи