4

Все задействованные компьютеры являются компьютерами Mac OS X 10.6.x.

Я на компьютере A, и на нем запущен mysql, и я могу подключиться к нему как A~ $ mysql -u punkish -p database и так далее.

У меня есть доступ к компьютеру B, на котором также запущен mysql. Я могу ssh в B через порт 2200 с настроенными парами ключей ssh, и как только я могу подключиться к БД,

A~ $ ssh -p 2200 punkish@B
B~ $ mysql -u punkish -p database

Однако я хочу настроить переадресацию портов через ssh на моем компьютере, чтобы все запросы, сделанные для mysql на порт 3307 на моем компьютере A, фактически отправлялись на порт 3306 на B. Это позволит мне использовать программу с графическим интерфейсом (Quantum GIS), которая хочет подключиться к mysql, но не может сделать это через туннель. Итак, я делаю следующее

A~ $ ssh -p 2200 -L 3307:B:3306 punkish@B
B~ $

Вышеперечисленное регистрирует меня прямо в B. Я не уверен, установлен ли туннель, но я предполагаю, что это так. Однако следующее не удается (в другом терминале

A~ $ mysql -P 3307 -u punkish -p
Enter password:
ERROR 1045 (28000): Access denied for user 'punkish'@'localhost' (using password: YES)

Вот что интересно: у меня есть еще одна графическая программа под названием Sequel Pro (клиент MySQL для настольных компьютеров для Mac OS X), которая может просто установить соединение с mysql @ B через ssh. Итак, я знаю, что-то работает ... Я просто не знаю как.

Отвечая на мой собственный вопрос (потому что я не могу ответить менее чем за 8 часов)

Я нашел решение, но не понимаю почему. Вот оно --

Я использовал следующую команду, чтобы сделать туннель

user@compt_A ~$ssh -p 2200 -L 3307:compt_B:3306 ssh_user@compt_B cat -

Я должен изменить выше, чтобы

user@compt_A ~$ssh -p 2200 -L 3307:127.0.0.1:3306 ssh_user@compt_B cat -

Теперь следующие работы

user@compt_A ~$mysql -P 3307 -p -h 127.0.0.1 -u <db user@compt_B>

Причина, по которой это не имеет смысла для меня, состоит в том, что первая команда говорит: «установить SSH-туннель через порт 2200, перенаправив локальный порт 3307 на порт 3306 на компьютере B», и это имеет больше смысла, чем «установить SSH-туннель через порт 2200, переадресация локального порта 3307 на порт 3306 на 127.0.0.1 "

Тем не менее, это работает.

Ох, если я использую первую команду, то команда mysql завершится неудачно с сообщением

ERROR 1130 (HY000): Host 'compt_A' is not allowed to connect to this MySQL server

2 ответа2

1

Используйте telnet, чтобы проверить, открыт ли туннель. "telnet HOSTNAME PORTNUMBER", если он соединяется, порт доступен с компьютера, с которого вы установили соединение.

Вы также можете позаботиться о опции "-g" для клиентов ssh:

-g Позволяет удаленным хостам подключаться к локальным перенаправленным портам.

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

0

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

http://dev.mysql.com/doc/refman/5.1/en/grant.html
http://dev.mysql.com/doc/refman/5.1/en/create-user.html

В нашем офисе, если я создаю базу данных на компьютере A и хочу, чтобы все пользователи в сети 172.16.0.1/24 или 192.168.0.1/24 могли иметь доступ к этой машине, если они знают имя пользователя "office_user" и пароль » office_pass». Мне нужно предоставить утверждение, которое позволит мне использовать клиент mysql на компьютере в офисе для подключения к любой базе данных, к которой я предоставляю доступ.

Это быстрый и небезопасный способ создания пользователя в офисе, который может выполнять любые действия в базе данных MySQL из любой сети. Используйте это только когда вы делаете простое тестирование и на непроизводственном сервере. Это дает пользователю "office_user" практически полный доступ ко всем базам данных на сервере MySQL.

СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'office_user'@'172.16.0.% 'IDENTIFIED BY' office_pass ';
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'office_user'@'192.168.0.% 'IDENTIFIED BY' office_pass '; ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ . TO 'office_user'@'172.16.0.% 'IDENTIFIED BY' office_pass ';
ПРИВИЛЕГИИ ПРОМЫВКИ;

Обратите внимание, что этот пользователь не будет работать на локальном хосте, так как я не включил

СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'office_user' @ 'localhost' ИДЕНТИФИЦИРОВАНО 'office_pass';

Нет, вы можете войти на свой сервер MySQL, размещенный по IP-адресу 172.16.0.20

mysql -u office_user -h 172.16.0.20 -p "office_pass"

Более надежно, вы можете предоставить собственный доступ с привилегиями только в той базе данных "office_db", которая вам нужна для программного обеспечения ГИС. Где ваш IP-адрес 172.16.0.20.

СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'office_user'@'172.16.0.20', ИДЕНТИФИЦИРОВАННОГО 'office_pass'; ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ на office_db.* TO 'office_user'@'172.16.0.20' ИДЕНТИФИЦИРОВАНО 'office_pass';
ПРИВИЛЕГИИ ПРОМЫВКИ;

Вы используете тот же логин, но он будет иметь доступ только к указанной базе данных

mysql -u office -h 172.16.0.20 -p "office_pass" office_db

Вы можете сделать это еще более безопасным, только предоставив себе те привилегии, которые вам нужны, такие как выбор и удаление. Пойдите и прочитайте документацию заявления гранта

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .