У меня есть приложение командной строки в Linux, которое использует определенный порт для связи с удаленным сервером. К сожалению, на работе этот порт заблокирован.

Я могу подключить свой ноутбук через VNC к сети, и ноутбук подключен к Wi-Fi, который имеет порт доступа к удаленному серверу. Я могу подключиться к ноутбуку через защищенную сеть, когда он подключен.

Есть ли способ использовать туннелирование порта ssh, чтобы обойти это? Могу ли я портировать туннель на свой ноутбук и сделать так, чтобы мой ноутбук выступал посредником между сетью, защищенной брандмауэром, и удаленным сервером?

Firewalled Linux Box ---ssh---> Mac OSX Laptop ---wifi---> Remote Server

Некоторые особенности:

  • Приложение командной строки - это оболочка для pip. В командной строке нет возможности указать прокси или альтернативный ip/ сервер для использования.
  • Насколько я понимаю, Pip может взаимодействовать с несколькими различными серверами, но, скорее всего, с pypi.python.org.
  • По словам источника, Пип связывается через порт 3128

Я пробовал следующее:

ssh -v -f -4 -N -L 3128:pypi.python.org:3128 andy@xx.x.xx.xxx

(Xx.x.xx.xxx заменяет IP-адрес ноутбука)

Когда он работает, он говорит:

Remote connections from LOCALHOST:3128 forwarded to local address pypi.python.org:3128

Это кажется мне задом наперед, но я новичок в этом, так что, кто знает! В любом случае, это не похоже на работу. К вашему сведению, в качестве теста я использую:

telnet pypi.python.org 3128

проверить, есть ли у брандмауэра машина сейчас, но нет.

Какие-нибудь мысли?

1 ответ1

1

Общее примечание: привязка защищенных сетей к незащищенным сетям не является чисто технической проблемой. Это может вас уволить или еще хуже. Получить разрешение на цепочку.

По технической части:

Для достижения:

телнет pypi.python.org 3128

вам нужно будет изменить ваш файл /etc /hosts так, чтобы он включал «pypi.python.org» как часть строки localhosts.

В моем случае, при доступе к удаленным репозиториям кода через ssh туннель, так что конфиги средства разработки остаются согласованными (всегда ссылаются на одно и то же имя хоста), даже когда удаленно, я просто использую что-то вроде следующего примера скрипта для настройки хостов (может вызываться cron или вручную).

Сделайте резервную копию файла /etc /hosts перед использованием скрипта.

triggerport=1234
servname="myserver"
if [ `netstat -nl | grep :631 | wc -l ` -gt 0  ]
  then 
    awk -v serv=$servname  '/127.0.0.1/ {print $0 " " serv;next} 1' /etc/hosts > /etc/hosts
 else
    awk -v serv=$servname '{gsub(serv,"")};1' /etc/hosts > /etc/hosts
fi

Как я уже говорил, вы можете настроить задание cron для запуска этого скрипта и автоматически установить отображение имени туннеля-хоста. Обычно я делал это только на межсистемных соединениях, которые при необходимости поднимают и опускают ssh-туннели.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .