Неизвестный сервер MySQL (через ssh-туннель и CLI, но не в рабочей среде) - PullRequest
0 голосов
/ 15 февраля 2012

Когда я пытаюсь получить доступ к mysql через SSH-туннель, я получаю сообщение об ошибке:

ERROR 2005 (HY000): Unknown MySQL server host '[serverhost]' (0)

Когда я делаю попытку через MySQL Workbench или через обычный SSH CLI, все работает нормально.Что я делаю неправильно?(Я просканировал несколько связанных тем на этом сайте, но ни одна из них не объяснила мне это поведение.)

TMI:

У меня есть имя хоста, а неIP.

Я открываю туннель таким образом:

plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:localhost:[remote-mysql-port]

Я вызываю mysql в моей командной строке (через туннель) таким образом:

mysql -h [serverhost] -u [user] -p[pw] --port [local-listen-port]

Я вызываю mysql поверхкомандная строка SSH (без туннеля), таким образом:

mysql -h [serverhost] -u [user] -p[pw] --port [remote-mysql-port]

1 Ответ

1 голос
/ 15 февраля 2012

Ваша существующая команда plink неверна, так как она указывает localhost в качестве адреса назначения (который является localhost на другой стороне сеанса SSH, так что [remote-ip], по вашим расчетам, именно поэтому вы получаете ошибка) - это должен быть [serverhost].

Затем вы по ошибке пытаетесь подключить mysql напрямую к [serverhost], но туннель не влияет на маршрутизацию, так что это неправильно, вы должны подключаться к localhost.

Ваша существующая примерная команда работает при подключении к сеансу оболочки ssh в [remote-ip], потому что вы подключаетесь из [remote-ip], который предположительно имеет доступ к [serverhost].

Предполагая, что [serverhost] является удаленным сервером, ваши команды должны быть:

plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:[serverhost]:[remote-mysql-port]

Тогда

mysql -h localhost -u [user] -p[pw] --port [local-listen-port]

РЕДАКТИРОВАТЬ: Позвольте мне попытаться наметить это для вас, поскольку вы, очевидно, неправильно понимаете природу туннеля:

Соединение SSH

localhost [?] <--------> remote-ip [22]

Туннель

localhost [local-port] <---- SSH ---> remote-ip [22] <--- TCP ---> serverhost [удаленный порт] * 1 028 *

Поэтому SSH / plink связал порт на localhost, используя указанный вами номер [local-port], который при получении запроса на соединение устанавливает соединение с [remote-ip] на [serverhost: remote- порт], затем перетасовывает отправку / получение между ними, используя свое собственное соединение SSH для перехода от [localhost] к [remote-ip].

Итак, после настройки туннеля для доступа к [serverhost: remote-port] вы фактически указываете свои инструменты на [localhost: local-port], и туннель направляет трафик в соответствующее место.

...