#php #mysql #ssh
#php #mysql #ssh
Вопрос:
У нас есть внутренняя база данных MySQL, которую наш отдел обслуживания клиентов использует для составления котировок, и внешняя база данных MySQL на нашем веб-сайте, которую используют наши клиенты для составления котировок. У меня есть отчет PHP, который я написал, который предоставляет мне информацию из внутренней базы данных. Теперь я хотел бы изменить отчет, чтобы включить также данные из внешней базы данных. Мне нужно подключиться к внешней базе данных с помощью SSH-соединения. Я рассматривал возможность использования cURL или SSH2, но я не уверен, что это правильный способ сделать это. Кто-нибудь раньше запрашивал базу данных SSH MySQL на веб-сервере, или кто-нибудь знает, что мне нужно сделать, чтобы это сработало? Спасибо за любую помощь, которую вы можете оказать!
Комментарии:
1. Можете ли вы подключиться к порту mysql удаленного сервера извне? Если это так, вы можете просто подключиться к их серверу, как к любому другому серверу mysql.
2. Я думаю, что для этого мне нужно было бы использовать код SSH2 в PHP. Я не делал этого раньше, поэтому я не уверен, что это сработает. Я подумал, что, прежде чем тратить слишком много времени на выяснение, подходит ли SSH2, я бы посмотрел, делал ли кто-нибудь что-то подобное раньше и мог бы указать мне правильное направление. Я начал изучать cURL, но из того, что я увидел, я не думаю, что это сделает то, что мне нужно. Пока я думаю, что мне придется попробовать подключиться к базе данных с помощью SSH2, а затем посмотреть, смогу ли я выполнять свои запросы после подключения.
3. Протокол подключения MySQL позволяет использовать SSL-шифрование. Не было бы необходимости использовать SSH и / или туннелирование, если вы не хотите предоставлять порт mysql миру: dev.mysql.com/doc/refman/5.0/en/secure-using-ssl.html
Ответ №1:
На самом деле я использую клиент MySQL с графическим интерфейсом под названием «Sequel Pro», который предлагает возможность подключения к MySQL через SSH-соединение. Это вполне выполнимо, хотя, если у вас есть возможность подключиться к базе данных без нее (например, вы можете подключиться к ней «извне» хоста), вы должны предпочесть это.
я полагаю, что самый простой способ, которым вы могли бы запросить свою базу данных через SSH, — это использовать переадресацию портов SSH, чтобы вы запустили процесс, который будет выполнять ssh user@host-that-has-the-db -L3306:localhost:3306
, а затем подключили бы ваш MySQL connector к localhost.
-L
Аргумент SSH указывает ему выполнить перенаправление локального порта, поэтому SSH будет прослушивать локальный порт и пересылать то, что он получает оттуда, непосредственно на указанный удаленный хост / порт с другого конца. очевидно, что в моем примере используется порт 3306 на обоих концах, но это может быть изменено соответствующим образом (RTM, чтобы узнать больше об этом)
Комментарии:
1. Итак, я бы запустил этот процесс на веб-сервере, правильно? Наш веб-сайт размещен, и провайдер не самый полезный, когда дело доходит до выполнения чего-то подобного. Это единственный способ заставить это работать, или есть другой способ? Я должен заявить, что я могу удаленно войти в базу данных с помощью Navicat … Я просто пытаюсь найти способ сделать это из моего PHP-кода. Спасибо!
2. @kheugel Да, SSH будет на стороне сервера. Как вы это делаете через Navicat? Выполняет ли он настройку SSH за вас? Если вы не можете создать
ssh
или использоватьOpenSSH
API из своего PHP, тогда вам не повезет, и вам придется прибегнуть к получению данных каким-либо другим способом.
Ответ №2:
Да, вы можете запросить mysql из bash через SSH, но это не лучший и масштабируемый способ. Лучшим решением было бы создать веб-службу REST на производственных серверах. Затем ваша внутренняя система запросит эту удаленную службу с аутентификацией.
Комментарии:
1. Есть идеи, как это сделать?
2.Возможно, существует бесконечное количество способов сделать это, старых и новых, однако я быстро поискал в Google что-нибудь простое для начала, я получил это:robertobartolome.com /… github.com/memaker/webservice-php-json , код — это просто пример для начала.
Ответ №3:
Вы настраиваете туннель от некоторого доступного порта на локальном сервере к порту mysql на удаленном сервере:
ssh -L 3307:localhost:3306 someuser@remoteserver
Это создает туннель, прослушивающий порт 3307 в локальной системе, который подключается к порту 3306 (MySQL) на удаленном сервере.
Затем укажите свой PHP-код для подключения к порту 3307 вместо 3306, и он будет туннелирован к mysql на удаленном сервере.