Попытка использовать MySQL Workbench с TCP / IP через SSH - не удалось подключиться

41

Я не могу подключиться с использованием TCP / IP через SSH-соединение в MySQL Workbench с ПК. В чем дело?

Я создал базу данных MySQL 5.1 на сервере Ubuntu mysql.myhost.com . Я могу получить к нему доступ локально. MySQL Workbench (ПК) предлагает установить соединение через TCP через ssh. Он работает через порт 3306 на удаленном сервере, где работает командная строка mysql.

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

  • Способ подключения: TCP / IP через SSH.
  • Имя хоста SSH: mysql.myhost.com : 3306
  • Имя пользователя SSH: мой логин Linux
  • Файл открытого ключа SSH: мой локальный файл открытого ключа
  • MySQL hostname: 127.0.0.1 MySQL
  • Порт сервера: 3306
  • Имя пользователя: root

При попытке подключиться появляется сообщение об ошибке: «Не удалось подключиться к MySQL на 127.0.0.1:3306 через SSH-туннель на mysql.myhost.com с пользователем root»

«Не удается подключиться к серверу MySQL на« 127.0.0.1 »(10061)»

В качестве другого теста - я настроил SSH-туннель с портом 3306, используя Putty, и я могу подключиться через MySQL Workbench через этот туннель, который перенаправляет соединения с моим локальным 3306 на удаленный сервер, как описано выше. Но я не могу заставить работать TCP / IP через SSH в Workbench.

Вторичный вопрос: когда Workbench запрашивает «Путь к файлу открытого ключа SSH», неужели ему не нужен мой файл закрытого ключа?

Dizzley
источник
4
Печаль во благо. bugs.mysql.com/bug.php?id=61368 показывает, что это файл ключа PRIVATE, необходимый в формате OpenSSH. Я задавался вопросом об этом, но был не уверен.
Диззли

Ответы:

29

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

  1. Я ничего не трогал в /etc/mysql/my.cnf, у которого уже есть bind_address = 127.0.0.1. Так что только localhost может подключиться.
  2. Я использую OpenSSH сервер. Поэтому в его конфигурационном файле / etc / ssh / sshd_config я изменил с нет на да параметр, отвечающий за пересылку TCP, поэтому AllowTcpForwarding yes .
  3. Наконец, я ввел следующее в MySQL WorkBench.

    • Имя хоста SSH: 192.168.0.8:22 (мой SSH-сервер прослушивает порт 22)
    • Имя пользователя SSH: sshuser
    • Файл ключа SSH: * C: \ Users \ windowsuser \ .ssh \ id_rsa * (должен быть закрытым ключом, даже если он говорит, что открыт)
    • MySQL Hostname: 127.0.0.1 (это не должно быть изменено, поскольку сервер MySQL по умолчанию привязан только к localhost, который я не менял)
    • Порт MySQL Server: 3306 (также по умолчанию)
    • Имя пользователя: root

Вам остается только правильно настроить SSH-сервер для работы с ключами, а не с паролями. Надеюсь, это кому-нибудь поможет.

глаз
источник
Единственное, что мне нужно было сделать на стороне сервера, - убедиться, что в / etc / ssh / sshd_config была эта строка, AuthorizedKeysFile /home/root/.ssh/authorized_keysи что в поле author_keys мой ключ PUBLIC использовался в качестве записи.
RyanNerd
Пожалуйста, уточните, AllowTcpForwarding yesприменяется ли шаг 2, какой набор, к удаленному серверу, т.е. к хосту с экземпляром MySQL, к которому мы пытаемся подключиться; или локальный компьютер с установленным MySQL Workbench
Nam G VU
Шаг 2 @NamGVU применяется к удаленному серверу, на котором установлен MySQL. Особенно к серверу OpenSSH, который обеспечивает туннелирование к MySQL через SSH.
Глаз
Я пытался, но все равно не смог туннелировать. MySQL Workbench говорит мне прочитать больше подробностей об ошибках в файле журнала. Можете ли вы знать, где читать?
Nam G VU
1
У меня сегодня работает - нужна перезагрузка после настройки AllowTcpForwardingзаписи
Nam G VU
8

Я думаю, что подход TCP / IP через SSH работает, устанавливая «нормальное» SSH-соединение, лежащее в основе MySQL-соединения (так же, как если бы вы использовали туннелирование -Lс клиентом командной строки OpenSSH).

Следовательно, вам нужно указать соединение с SSH-сервером на сервере, через который вы устанавливаете туннель. Здесь вы, похоже, используете mysql.myhost.com:3306, что подразумевает, что вы используете этот SSH-сервер (не MySQL) на порту 3306.

Можно привязать сервер MySQL к 127.0.0.1:3306 и сервер SSH к внешнему IP-адресу для mysql.myhost.comпорта 3306, но это маловероятно. Я полагаю, ваш SSH-сервер прослушивает порт 22 (по умолчанию).

Вы, вероятно, должны использовать mysql.myhost.com:22. (Убедитесь, что вы можете подключиться к нему через обычный SSH-клиент, такой как Putty).

Bruno
источник
8

Вам может потребоваться проверить пользователей в таблице mysql.user.

Запустите этот запрос:

SELECT user,host FROM mysql.user;

Вы должны увидеть что-то вроде этого:

mysql> SELECT user,host,password FROM mysql.user;
+------------------+-------------+-------------------------------------------+
| user             | host        | password                                  |
+------------------+-------------+-------------------------------------------+
| root             | localhost   | *7A670E02260CDEEFF062DD08F3A6F6DA079998CB |
| ping             | %           | *124E1DB56CC8D6E2FEE8315BB2544BF04B980DB6 |
| admin            | 10.67.135.% | 1a6858054a41fede                          |
| icorbin          | 10.67.135.% | 366ed93a7396650e                          |
+------------------+-------------+-------------------------------------------+
4 rows in set (0.00 sec)

Пожалуйста, обратите внимание, что

  • root @ localhost может войти только с локального хоста.
  • ping @ '%' может войти через TCP / IP
  • admin@10.67.135.% может войти через TCP / IP только с этого сетевого блока
  • icorbin@10.67.135.% может войти через TCP / IP только с этого сетевого блока

Если вы хотите, чтобы root подключался через TCP / IP, вы должны указать IP-адрес или сетевой блок для пользователя root.

Что-то вроде этого:

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'whateverpassword';

или если пароль root одинаков для root @ localhost, то

GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY PASSWORD '*7A670E02260CDEEFF062DD08F3A6F6DA079998CB ';

ПРЕДУПРЕЖДЕНИЕ: root @ '%' обычно не рекомендуется. Возможно попробуйте root@'10.% 'или любой другой сетевой блок для root.

Попробуйте!

RolandoMySQLDBA
источник
3
Не должен ...@localhostработать через туннель SSH, так как для сервера MySQL соединение происходит с конца туннеля?
Бруно
@Bruno: один верный способ узнать это - успешно подключиться и запустить SELECT USER (), CURRENT_USER (); и посмотрим, что он выводит. Функция USER () отображает то, что вы пытались аутентифицировать, в то время как CURRENT_USER () отображает то, что MySQL разрешил вам аутентифицировать. Если CURRENT_USER () повторяет root @ localhost, тогда ответ на ваш вопрос - да.
RolandoMySQLDBA
3

Возможно, вы используете более старую версию MySQL Workbench и вам нужно обновить ее. Это ошибка в версии 6.0.8, которая в настоящее время является версией в репозиториях Ubuntu. Обновление до версии 6.3.6 исправило это для меня.

Загрузите здесь: http://dev.mysql.com/downloads/workbench/#downloads

Gleasonator
источник
2

Одна вещь, которая не упоминается ни в одном другом ответе, - это важность формата OpenSSH для ключа, как указано в SO ( https://stackoverflow.com/questions/34504232/mysql-workbench-failing-to-connect-via- ssh-due-to-key / 38108623 # 38108623 ).

Несмотря на ответ, я смог использовать защищенный паролем ключ с MySQL Workbench 6.3.7 (64-битная, Windows 10).

Томас
источник
2

Моя проблема была связана с тем, что я пытался использовать ed25519ключ SSH. Я заметил эту ошибку на сервере SSH в auth.log:

sshd[25251]: Connection closed by 192.168.x.x [preauth]

Как только я переключился на использование ключа RSA, все заработало как положено.

jbiz
источник
1

Вы пытаетесь подключиться к серверу через ssh, но используете порт mysql. Порт, который вы хотите, это то, что прослушивает ваш ssh-сервер, обычно 22, затем localhost и 3306 для имени хоста и порта mysql.

Джастин Бузер
источник
1

Я столкнулся с той же проблемой. Я проверил и попытался установить AllowTcpForwarding Да, но он отсутствовал в моем sshd_config, так что не помогло. убедитесь, что имя хоста ssh НЕ совпадает с именем хоста mysql (используйте localhost).

В рабочей среде выберите +, чтобы добавить новое соединение, и установите следующее:

  • способ подключения: стандартный TCP / IP через SSH
  • Имя хоста SSH: 192.168.0.50:22 (укажите IP-адрес и порт удаленного SSH-сервера (необязательно))
  • Имя пользователя SSH: sshuser
  • Вы можете установить пароль или добавить в командной строке
  • MYSQL имя хоста: localhost или 127.0.0.1
  • Порт сервера MYSQL: 3306
  • Вы можете установить пароль или добавить в командной строке

Тестовое соединение. Это должно быть успешным, тогда нажми OK.Viola!

Reegan Ochora
источник
1

Иногда ключи, созданные PuTTY, не работают. Используйте ssh-keygen в окне Linux для создания пары ключей. Скопируйте содержимое нового id_rsa в текстовый файл в Windows. Обязательно добавьте содержимое id_rsa.pub в авторизованные ключи на коробке Linux. Все остальные значения по умолчанию в Workbench в порядке, включая 127.0.0.1 для MySQL Hostname. Конечно, это должен быть стандартный TCP / IP поверх SSH.

mcmacerson
источник
1

Я придумал ту же ошибку. Проблема в «несколько» тайм-ауте. Я провернул даже значение до 120 секунд, что не помогло.

В моем случае я мог решить эту проблему, выполнив nslookup myserver.com и используя IP-адрес вместо имени хоста. Мое предположение является проблемой при попытке подключения от IPv4 к IPv6.

Маркус Зеллер
источник
0

Только что возникла такая же проблема на компьютере с Ubuntu, который подключался к серверу под управлением MySQL версии 5.5.29 и MySQL Workbench 5.2.40. Сервер SSH требует использования ssh-ключа.

Я не смог подключиться к серверу MySQL с помощью пользователя root, вместо этого мне пришлось создать отдельного пользователя без полномочий root для использования при входе в систему. После этого я смог подключиться просто отлично.

Надеюсь это поможет.

Кайл Кутс
источник
0

Хорошо, я знаю, что это старый вопрос, но я выдернул свои волосы над этим в течение нескольких часов. Я проверил все упомянутое Bruno и Eye, и все это показалось хорошим. Затем я понял, что это действительно секретный / открытый ключ. Поэтому я запустил Pageant и добавил свой закрытый ключ, чтобы он создал открытый ключ, который MySQL Workbench мог читать и вуаля, подключен! (На самом деле, когда MySQL Workbench начал работать, это было своего рода антиклиматично, но счастливым способом.)

TLDR: используйте Pageant для генерации открытого ключа из вашего личного ключа.

Бонни
источник
Закрытые ключи никогда не должны использоваться в качестве открытых ключей, поэтому они являются закрытыми.
Джеймс Андерсон
@JamesAnderson разве не в этом ошибка ? Текст запрашивает приват, его следует читать публично ... хотя бы по ссылке на ошибку. Или не?
Туфир
-1

Только то, что я нашел ... часто я создаю пользователей на SSH-сервере без оболочки (например, / sbin / nologin), чтобы они не могли войти на сервер и создавать там файлы и т. Д. (Для производственных систем мы Делаем это на брандмауэрах).

После этого в обычной среде Linux вы все еще можете перенаправлять порты, например:

ssh -Nf -L 3306:%mysql_ip%:%mysql_port% %ssh_host%

и после этого подключитесь к нему с локальной рабочей станции как:

mysql -h localhost:3306 -u %mysql_user% -p

Но верстак выдает ошибку, что он не может подключиться к MySQL ... Если вы измените оболочку для этого пользователя, скажем, на / bin / bash - после этого все будет работать нормально.

Понятия не имею, почему Workbench требует локальной оболочки на удаленном SSH-сервере.

user251897
источник
-1

Просто создайте новый ключ RSA с форматом, соответствующим формату MySQL.

Например:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
будет будет
источник