Хорошо, я наткнулся на рассол. У меня есть веб-приложение, которое мне действительно нужно продемонстрировать на этих выходных. Я не могу продемонстрировать это, если мой системный администратор (который не работает) не отключит клиентскую SSL-аутентификацию. Однако есть путь, по которому может течь информация. Веб-приложение находится на сервере A. У меня есть другой сервер B, который может подключаться к серверу A по ssh. Сервер B также общедоступен. Я могу запустить приложение на сервере A локально (то есть на локальном хосте), но я вообще не могу запустить приложение на сервере B. Моя идея состоит в том, чтобы каким-то образом использовать SSH, чтобы разрешить серверу B прокси-запрос на localhost: 8000 на сервере A. Однако я не знаю, как это сделать. Любые идеи? У меня нет root ни на одной из этих машин, заметьте.
ОБНОВЛЕНИЕ: наш системный администратор был святым и нашел время в выходные, чтобы пробраться к VPN из своего дома, чтобы помочь нам.
изменить: я также могу ssh с сервера A на сервер B, чтобы можно было настроить обратный SSH-туннель somesort.
edit2: также только 1 клиент должен иметь возможность использовать приложение, и этот клиент заслуживает доверия и может до некоторой степени сотрудничать со мной.
Поскольку вы не сказали, какой SSH-клиент используете, я возьму OpenSSH. В принципе, вы можете сделать то же самое с PuTTY, хотя особенности будут другими.
Есть три возможных способа сделать это в зависимости от того, что вам будет проще.
Самый простой способ - это заставить ваше веб-приложение на сервере A прослушивать так, чтобы сервер B был доступен, например, не привязываясь к localhost, а к внутреннему IP-адресу сетевой карты. В этом примере сервер прослушивает порт 8000, а ServerA имеет внутреннее имя хоста serverA.internal.example.com. Затем вы можете сделать что-то вроде:
client$ ssh -L 12345:serverA.internal.example.com:8000 serverB.external.example.com
Затем машина, на которой запущен ssh, сможет получить доступ к веб-приложению на http://localhost:12345/
Этот метод требует, чтобы у клиента был SSH к серверу B.
Если вы не можете изменить свое веб-приложение для прослушивания чего-либо, кроме localhost, вам придется сделать что-то вроде этого:
client$ ssh -L 12345:localhost:23456 serverB.external.example.com
serverB$ ssh -L 23456:localhost:8000 serverA.internal.example.com
Это приведет к последовательному соединению двух туннелей SSH, что позволит вам получить доступ к веб-приложению с клиента на http://localhost:12345
Этот метод потребует, чтобы клиент имел доступ к серверам B и A. Вы можете уйти, только предоставив клиенту доступ к серверу B, предварительно настроив вторую половину туннеля.
Если вы абсолютно не можете предоставить клиенту учетную запись SSH даже после блокировка клиента, чтобы разрешить только SSH-туннелирование, остается способ 3.
yourbox$ ssh -L '*:12345:localhost:23456' serverB.external.example.com
serverB$ ssh -L 23456:localhost:8000 serverA.internal.example.com
Обратите внимание на добавление *: к первому туннелю. Таким образом, первый туннель SSH, запущенный из ваш машина (не клиентская машина) связывает порт прослушивания с любым сетевым интерфейсом, который, вероятно, будет IP-адресом LAN в вашем случае. Затем вы можете настроить маршрутизатор для перенаправления порта на этот порт на вашем компьютере.
Таким образом, по сути, клиент будет подключаться к IP-адресу WAN маршрутизатора, который будет подключать его к IP-адресу локальной сети вашего компьютера, что позволит клиенту разговаривать с OpenSSH на вашем компьютере, что будет направлять его в туннель SSH, привязанный к локальному хосту сервера B. : 12345, который направит его в другой туннель SSH вниз на localhost сервера A: 23456, и все готово.
Имейте в виду, что это сделает ваше веб-приложение доступным для всех, кто знает IP-адрес вашего маршрутизатора и номер порта.
Надеюсь это поможет!