Вопрос или проблема
Я искал ответ на это, но не смог найти.
Я пытаюсь установить несколько пакетов PyPi на сервере (tachi), который не имеет доступа в интернет, и к которому можно получить доступ только через SSH-джамхост (pella), который использует двухфакторную аутентификацию (google-authenticator).
Обычно, если бы не было джамхоста на пути, я бы сделал что-то вроде этого, чтобы позволить pip загружать пакеты через мой локальный компьютер (koto):
ssh [email protected] -R tachi.example.org:8888
А затем на tachi:
pip3 --proxy socks5://localhost:8888 install --upgrade pip
Это работает отлично.
Однако, когда я добавляю джамхост (pella) в эту комбинацию, это не срабатывает. На джамхосте я включил это в sshd_config:
AllowTcpForwarding yes
AllowAgentForwarding yes
PermitTunnel yes
(это также включено на tachi)
Я пытался выполнить эти команды:
tony@koto:~$ ssh pella.example.org -R pella.example.org:8888
tony@pella:~$ ssh tachi.example.org -R 8888:tachi.example.org:8888
tony@tachi:~$ pip3 --proxy socks5://localhost:8888 install --upgrade pip
Но pip не подключается и в конечном итоге истекает по времени с сообщением:
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.contrib.socks.SOCKSHTTPSConnection object at 0x71b236020dd0>: Failed to establish a new connection: [Errno 99] Cannot assign requested address')': /simple/pip/
Я также пробовал:
tony@koto:~$ ssh [email protected] -R tachi.example.org:8888 -J [email protected]
Но pip все равно не подключается.
Если я послушаю вывод из ssh -vvvv, в нем ясно говорится, что обратные туннели создаются, и на джамхосте (pella) и на сервере (tachi) я вижу с помощью ss -anp, что туннель существует на порту 8888.
Я, вероятно, неправильно использую туннелирование, но мне не удалось найти решение или понять, как это сделать.
Есть ли среди вас SSH-гуру с какими-либо идеями?
Заранее спасибо,
/tony
редактировать: забыл упомянуть, что на tachi также включены переадресация и т.д.
Ответ или решение
Чтобы установить пакеты PyPi на сервере (tachi), который недоступен в интернете и доступен только через SSH-джам-хост (pella) с двухфакторной аутентификацией, необходимо правильно настроить обратные SSH-туннели. В этой статье мы рассмотрим все необходимые шаги для успешной установки пакетов с помощью pip через SSH-обратный туннель, даже когда используется джам-хост.
Шаг 1: Подготовка SSH-доступа
Перед началом убедитесь, что вы можете подключаться к вашему джам-хосту (pella) и серверу (tachi) без каких-либо ошибок. Также проверьте, что на обоих серверах в конфигурации SSH (sshd_config
) включены следующие параметры:
AllowTcpForwarding yes
AllowAgentForwarding yes
PermitTunnel yes
Шаг 2: Установка обратного туннеля через джам-хост
Вам нужно открыть два SSH-туннеля. Сначала создайте SSH-сессию для обратного туннелирования на джам-хосте, а затем forwarded (перенаправленный) туннель к серверу. Выполните следующую команду из вашего локального терминала (koto):
ssh -J [email protected] tachi.example.org -R 8888:localhost:8888
Шаг 3: Повторное создание обратного туннеля на сервере tachi
На сервере tachi создайте обратный туннель, который будет перенаправлять трафик через джам-хост:
ssh [email protected] -R 8888:localhost:8888
Таким образом, локальный порт 8888 на вашем джам-хосте (pella) будет перенаправлен к порту 8888 на сервере (tachi).
Шаг 4: Проверка открытых портов
Убедитесь, что туннели были созданы правильно. Используйте следующую команду на pella и tachi, чтобы проверить, работают ли они:
ss -anp | grep 8888
Шаг 5: Установка пакетов с помощью pip
Теперь вы можете установить пакеты через pip, используя прокси-сервер на локальном порту 8888. На сервере (tachi) выполните:
pip3 --proxy socks5://localhost:8888 install --upgrade pip
Важные замечания
-
Двухфакторная аутентификация: Убедитесь, что вы успешно прошли процедуру двухфакторной аутентификации перед выполнением команд. Это может влиять на доступ к джам-хосту.
-
Проблемы с соединением: Если pip продолжает выдавать ошибки, проверьте, все ли настройки прокси верны и что на tachi установлен пакет
socks5
. -
Логи SSH: Используйте параметр
-vvv
для отладки SSH-сессии, чтобы выявить возможные ошибки при установлении соединений между узлами.
Таким образом, с помощью этих шагов вы сможете установить пакеты PyPi на сервере tachi через SSH-обратный туннель через джам-хост pella. Не забывайте следить за состоянием туннелей и обеспечивать корректное подключение.