Доступ к SQL Server через туннель SSH

В моем магазине разработки мы развертываем код на виртуальных серверах, которые находятся в удаленной сети.

Мы получаем доступ к машинам в этой сети, сначала открывая SSH-соединение с сервером шлюза, а затем SSH-туннелируя RDP через локальный порт.

Я бы очень хотел иметь возможность локального доступа к экземплярам SQL Server, работающим на этих серверах, таким же образом.

Я настроил локальный порт (3398) для перенаправления на порт SQL Server на удаленном экземпляре (L3398 -> remote.machine.com:1433).

Затем я могу проверить соединение, подключившись по телнету к локальному хосту 3398, и я получаю соединение: экран очищается, и я могу вводить символы для какого-то процесса прослушивания.

Но когда я пытаюсь подключить SSMS к localhost:3398, время ожидания истекает, а затем утверждается, что SQL Server не прослушивает этот порт:

Cannot connect to localhost:3398

Additional information:
A network-related or instance-specific error occurred while establishing a connection 
to SQL Server. The server was not found or was not accessible. Verify that the
instance name is correct and that SQL Server is configured to allow remote
connections. (...)

Я уверен, что сервер принимает удаленные подключения, потому что я подключился к нему удаленно, войдя через RDP на другую машину в удаленной сети.

Я погуглил, чтобы узнать, что это возможно; Кто-нибудь знает, почему это не работает, или что я могу сделать, чтобы диагностировать и, надеюсь, решить проблему?

Спасибо!


person Jim Burnell    schedule 02.08.2011    source источник
comment
Я предполагаю, что везде, где вы набрали 3393, вы имели в виду 3398? Я пытался его отредактировать, но там опечатки всего на 2 символа, и чтобы отправить правку, вы должны внести как минимум 8 символов изменений. Однако почти уверен, что ОП может вносить небольшие правки.   -  person dx_over_dt    schedule 30.01.2018
comment
Обновил все 3393 до 3398.   -  person Jim Burnell    schedule 30.01.2018


Ответы (4)


Вместо подключения к локальному хосту: 3398 используйте 127.0.0.1,3398.

person Dan    schedule 06.09.2011
comment
localhost,3398 также будет работать. Важно то, что порт и хост разделены запятой, а не двоеточием. - person Remus Rusanu; 07.09.2011
comment
localhost мне не помогло, а 127.0.0.1 вполне нормально. Это должен быть принятый ответ. - person anthares; 01.04.2016
comment
Просто добавим к этому: localhost может разрешаться в IPv6 :: 1 в зависимости от настройки вашей сети и т. д. Поддержка IPv6 по умолчанию зависит от вашей версии MySQL: из документации MySQL 5.6 ( dev.mysql.com/doc/refman/5.6/en/ipv6-support.html ): по состоянию на MySQL 5.6.6, конфигурация сервера MySQL по умолчанию разрешает соединения IPv6 в дополнение к соединениям IPv4. До версии 5.6.6 по умолчанию разрешались только соединения IPv4. - person Hugh Nolan; 19.12.2016
comment
Спасибо! Просто завершил 2-часовой поиск, чтобы исправить. - person Flinkman; 06.11.2020

Для типа аутентификации Azure Active Directory - Universal with MFA (Mutli-Factor Authentication) помимо правильного указания порта (127.0.0.1,3398) мне еще нужно было указать хост на localhost.

В Windows мне пришлось отредактировать файл hosts, включив в него хост сервера:

127.0.0.1    server.example.com

Затем в SSMS я мог бы подключиться к server.example.com,3398, что бы корректно выполняло MFA.

Я мог бы выполнить это перенаправление и на более высоком уровне DNS.

person palswim    schedule 07.08.2019
comment
Я понимаю, что на этот вопрос был принят ответ в течение 8 лет, и я не собираюсь это менять. Однако этот ответ может помочь любому, кто сталкивается с теми же проблемами, что и я, с MFA. - person palswim; 07.08.2019

Вероятно, проблема заключается в том, что SSMS пытается получить доступ к службе браузера SQL Server, которая является UDP-портом 1434. Взгляните на http://technet.microsoft.com/en-us/library/cc646023.aspx. для обзора дополнительных портов, которые вам могут понадобиться, чтобы заставить это работать.

person Femi    schedule 02.08.2011
comment
The SQL Server Browser service listens for incoming connections to a named instance and provides the client the TCP port number that corresponds to that named instance. Normally the SQL Server Browser service is started whenever named instances of the Database Engine are used. The SQL Server Browser service does not have to be started if the client is configured to connect to the specific port of the named instance. Похоже, это служба поиска на случай, если на нескольких портах запущено несколько экземпляров. У меня есть только один экземпляр, работающий на порту по умолчанию, 1433. - person Jim Burnell; 02.08.2011
comment
Что ж, это правда, но вы настроили SSMS для подключения к определенному порту именованного экземпляра? По умолчанию SSMS попытается просмотреть: я не уверен, есть ли чистый способ отключить это поведение. - person Femi; 02.08.2011
comment
В поле Имя сервера: я указываю localhost:3398. Поскольку мой локальный порт 3398 сопоставляется с портом 1433 на удаленной машине, это должно указывать порт удаленного экземпляра, верно? В любом случае я не думаю, что служба браузера SQL Server работает на удаленной машине. - person Jim Burnell; 02.08.2011
comment
Для указания номера порта используется следующий формат: hostname,portnum. То есть разделите их запятой; вы использовали двоеточие. - person Ben Thul; 03.08.2011
comment
Это очень полезно знать (глупый Microsoft!). К сожалению, мою проблему это не решило. Я почти уверен, что это какая-то проблема с сетью. - person Jim Burnell; 03.08.2011
comment
Мне любопытно: если вы запускаете SSMS на самом сервере, он работает? - person Femi; 03.08.2011
comment
Собственно, это немного помогло. Теперь сообщение об ошибке: Не удалось установить соединение, поскольку целевая машина активно отказалась от него. Возможно, это брандмауэр на машине, но я могу использовать другие серверы БД в удаленной сети для подключения к машине, так что... не уверен. В любом случае, это небольшой прогресс, спасибо! - person Jim Burnell; 03.08.2011
comment
@Феми: да. У нас есть четыре машины в удаленной сети, на которых работает SQL Server, и, зайдя на одну из этих машин, я могу подключиться к трем другим с помощью SSMS. - person Jim Burnell; 03.08.2011

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

Похоже, что в удаленной сети (которую мы не контролируем) в целях безопасности серверы баз данных настроены на игнорирование запросов к базе данных, поступающих от шлюза. Так что я думаю, что нет другого хорошего решения, кроме как убедить их предоставить нам полный доступ к VPN. Спасибо всем за вашу помощь.

person Jim Burnell    schedule 07.10.2011