У нас есть настольное приложение Windows, которое подключается к стороннему серверу через сокет. Сторонний сервер требует, чтобы мы подключались с фиксированного общедоступного IP-адреса. Нам нужно подключаться с разных IP-адресов, поэтому я настраиваю сервер (Linux) для туннелирования подключений, чтобы он смотрел на сторонний сервер, что все подключения все время идут с одного и того же IP-адреса:
ssh -N -L порт: 127.0.0.1: порт учетной записи @ ip -p порт2
Туннель работает нормально; В качестве теста я могу подключиться к нему через Telnet из учетной записи, с которой он был создан.
Чтобы позволить машинам Windows (которые запускают приложение) проходить через туннель, я добавил -g в командную строку ssh. Теперь другие машины также могут подключаться по telnet через туннель. Пока все работает. Однако я хочу иметь возможность ограничить круг лиц, которые могут использовать туннель. Когда я подключился к серверу Linux через telnet, я ожидал, что мне будет предложено ввести имя пользователя / логин учетной записи, создавшей туннель; вместо этого соединение просто создается без ограничений. Я не хочу использовать фильтрацию IP-адресов, поскольку именно по этой причине я в первую очередь настраиваю сервер Linux (чтобы разрешить любой IP-адрес). Как я могу заставить сервер Linux запрашивать имя пользователя / пароль при подключении к туннелю с другой машины? Будет ли это сделано с помощью каких-то дополнительных или других параметров командной строки для ssh, или мне нужно использовать что-то еще?
Я ожидал запустить что-то вроде Bitvise Tunellier на настольных машинах Windows. Таким образом, я бы сказал настольному приложению Windows подключиться к локальному порту на машине Windows, на которой оно работает. Tunellier будет туннелировать этот локальный порт на сервер Linux. Сервер Linux, в свою очередь, будет туннелировать к стороннему серверу.
Если вы хотите потребовать аутентификацию, вам, вероятно, следует отказаться от -g
возможность сделать туннель доступным для сети. Затем потребуйте, чтобы все, кому нужен доступ к туннелю к удаленной системе, установили соединение с вашим SSH-сервером с помощью туннеля.
Как я могу заставить сервер Linux запрашивать имя пользователя / пароль при подключении к туннелю с другой машины?
В SSH нет ничего, что могло бы автоматически добавлять этап аутентификации поверх сеанса telnet. Простое решение, как я предложил выше, - разрешить доступ к туннелю только в том случае, если пользователь может пройти аутентификацию на сервере ssh. Вы можете получить аналогичный результат с помощью VPN между клиентами и SSH-сервером.
Я не уверен, что именно предоставляет этот туннель, но вы можете настроить учетную запись на SSH-сервере. Затем настройте эту учетную запись для автоматического запуска telnet для подключения к этому туннельному соединению.
Итак, вы можете сделать что-то вроде создания туннельного доступа к учетной записи, а затем добавить что-то подобное в свой sshd_config. Поэтому всякий раз, когда пользователь входит в систему как tunnelaccess
команда на подключение к удаленному туннелю должна произойти немедленно.
Match User username
AllowTCPForwarding no
X11Forwarding no
ForceCommand connect tunnel # replace with tool to connect to tunnel