Назад | Перейти на главную страницу

Добавить временную запись для хостов при туннелировании SSH

Находясь за пределами брандмауэра нашей компании, я использую сценарий для туннелирования через SSH и предоставления нашей внутренней вики-страницы моей машине с OSX. Есть ли команда, которая временно сообщает OSX о разрешении на мой локальный порт при настройке туннеля?

Я надеюсь использовать следующую последовательность:

  1. открыть туннель ssh -f external-proxy.example -L 8001:internal-wiki.example:8000 -N
  2. [СДЕЛАЙТЕ ЧТО-ТО ЗДЕСЬ]

  3. ввод URL внутренний-wiki.example: 8000 в моем браузере заставляет его прозрачно просматривать локальный: 8001

Другие детали:

У меня есть решение для вас, оберните вашу команду ssh в сценарий bash:

#!/bin/bash

function control_c {
    echo -en "\n## Caught SIGINT; Clean up /etc/hosts and Exit \n"
    sed -i '' "/internal-wiki/d" /etc/hosts
    exit $?
}

trap control_c SIGINT
trap control_c SIGTERM

(sleep 5; open http://internal-wiki.example:8001 &)&
echo '127.0.0.1 internal-wiki.example' >> /etc/hosts
ssh -L8001:internal-wiki.example:8000 -f external-proxy.example -N

Объясняя:

  1. функция, которая выполняет очистку Control-C при запуске
  2. ловушка Control-C и выключение
  3. спи, скажи osx открыть твой сайт, уйди с дороги (амперсанд)
  4. добавляет запись в /etc/hosts
  5. создать туннель
  6. когда вы ctrl-c, функции запускаются и очищают /etc/hosts с переходным входом

Приношу свои извинения, если этого недостаточно для ответ, У меня недостаточно комментариев, чтобы здесь комментировать.

думаю / etc / hosts возможно лучший вариант. Я не знаю, каков ваш процесс разборки, но вы можете добавить удаление /etc/hosts вход как его часть.
Также я думаю, что смена порта не будет работать с /etc/hosts решение. Вы можете составить карту localhost:8000 к internal-wiki.example:8000?

Тогда вы могли бы добавить что-то вроде 127.0.1.1 internal-wiki.example к /etc/hosts и удалите линию при остановке туннеля вот так: sed -i '' '/127.0.1.1 internal-wiki.example/d' (не забудьте проверить это перед запуском, конечно).

Это должно позволить вам использовать http(s)://internal-wiki.example:8000 в вашем браузере.

Это не идеальное решение, но что-то лучшее (например, сопоставление портов), как мне кажется, потребует локального запуска http-прокси.

Как бы то ни было, добавление и удаление записей хоста - это то, как Parallels делает виртуальные машины адресуемыми по имени хоста. Это добавлено к моему /etc/hosts пока мой xu17 ВМ запущена: 172.20.10.112 xu17.shared xu17 #prl_hostonly shared

Конечно, запустив прокси nginx справились бы с этим хорошо, но это может быть немного больше настройки, чем вы ищете?
Более простой вариант с netcat может работать в зависимости от веб-приложения.

# make fifo for second nc to transfer response back to first nc
mkfifo /tmp/proxy.pipe
nc -lk 8001 < /tmp/proxy.pipe | nc internal-wiki.example 8000 > /tmp/proxy.pipe

Затем, когда вы закроете туннель, вы можете убить nc обрабатывать и удалять /tmp/proxy.pipe

Запустите веб-сервер балансировки нагрузки на своем Mac, балансируя между пересылкой localhost и реальным адресом вики, настроенным для предпочтения адреса пересылки localhost.

Когда соединение ssh не работает, балансировщик нагрузки заметит и направит ваши соединения на обычный адрес вики.

Настройте свой веб-браузер на прокси-соединения для вики через балансировщик нагрузки.

Что-то вроде кувалды, чтобы расколоть орех.

Службы имен (DNS, ldap, / etc / hosts) не «разрешают порты», они разрешают имена хостов. Это утверждение не совсем верно, но правильное объяснение здесь неуместно и требует времени.

Поскольку OSX использует ядро ​​BSD, я предполагаю, что он также может «позаимствовать» оттуда много другого кода. Файлы ns resolver по умолчанию читают из / etc / hosts, но это можно изменить в Linux и BSD, установив переменную среды HOSTALIASES (в оболочке, из которой вы запускаете браузер), но это работает, только если нет '.' во имя. Если вы можете использовать URL-адреса без расширения. во имя это решит вашу проблему.

В качестве альтернативы вы можете запустить сценарий для настройки перенаправления портов для перенаправления пакетов, адресованных xxx.xxx.xxx.xxx:8000, на 127.0.0.1:8001 и наоборот для входящих пакетов. Но это довольно непростое решение.

В качестве альтернативы вы можете установить squid и использовать настраиваемый перенаправитель URL-адресов для перезаписи запросов (также возможно, если вы начнете использовать https - но сложно).

Гораздо более понятным вариантом было бы запустить правильное туннельное соединение через ssh. Я считаю, что OSX из коробки не поддерживает это, но есть совместимые с openvpn дополнения для osx

Если бы это был я, я бы просто настроил сценарии для обмена файлами с хостами, сохраняя весь трафик на одном порту и следя за тем, чтобы конфигурация по умолчанию была заменена во время загрузки и после завершения ssh-соединения.

Создайте запись временных хостов:

rm /tmp/hosts
cp /etc/hosts /tmp/hosts
echo "127.0.0.1 example.com" >> /tmp/hosts
mount --bind /tmp/hosts /etc/hosts

Удалить запись временных хостов (и вернуть файл постоянных хостов):

umount -f /etc/hosts

либо перезагрузка, либо выключение.