Соединитесь с сервером MySQL по SSH в PHP

19
задан George Garchagudashvili 11 December 2014 в 11:00
поделиться

5 ответов

Eric,

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

Вам, вероятно, нужны специальные полномочия сделать это, все же. Также похоже, что у Вас нет ssh доступа к этому хостинг-аккаунту.

- Joao

1
ответ дан 30 November 2019 в 03:43
поделиться

Я использовал бы инструмент autossh для создания персистентного туннеля ssh к mysql базе данных. Затем все, что необходимо сделать в коде PHP, является точкой он к localhost.

можно протестировать это (без автоматического перезапуска) путем выполнения:

ssh -L 3306:localhost:3306 user@domain.com

Установка ssh ключ так, чтобы Вы не должны были использовать пароли и настроить .ssh/authorized_keys файл в mysql системе, чтобы только позволить этому использоваться для перенаправления портов.

Для большего количества информации о приемах ssh см. Brian Hatch превосходный ряд на SSH и перенаправлении портов.

15
ответ дан 30 November 2019 в 03:43
поделиться

Я попробовал его путем выполнения SSH и корневыми учетными данными и и общедоступная пара с закрытым ключом. Это позволяет мне соединяться через командную строку, но не через код PHP.

я также попробованный путем создания туннеля (при помощи функций SSH2) и выполнения оболочки управляю из кода PHP (system, exec, и т.д.); ничто не работало.

Наконец я попробовал функцию SSH2 для выполнения команды оболочки, и она наконец работала :)

Вот мой код, если она помогает Вам:

$connection = ssh2_connect($remotehost, '22');
if (ssh2_auth_password($connection, $user,$pass)) {
    echo "Authentication Successful!\n";
} else {
    die('Authentication Failed...');
}


$stream=ssh2_exec($connection,'echo "select * from zingaya.users where id=\"1606\";"  | mysql');
stream_set_blocking($stream, true);
while($line = fgets($stream)) {
    flush();
    echo $line."\n";
}

Попытка это, если хотят использовать функции PHP конкретно.

6
ответ дан 30 November 2019 в 03:43
поделиться

Я думаю, что Ваш лучший выбор состоит в том, чтобы найти другого поставщика услуг хостинга; я предлагаю решение VPS (Виртуальный Частный Сервер), который дает Вам полный контроль над Вашим веб-хостом. Тот путь, если Вам не нравится конфигурация по умолчанию, можно обновить ее сами.

1
ответ дан 30 November 2019 в 03:43
поделиться

Это возможно, но почему? Это более сложно, чем это должно быть, и подвержено ошибкам.

разве Вы не можете выполнить базу данных локально? В противном случае разве Вы не можете использовать что-то как SQLite, XML-файлы или что-то еще, что не требует отдельного демона сервера?

Вы действительно не хотите инициализировать туннель в Сценариях PHP. Инициализация туннеля SSH занимает много времени (может легко быть секунда или два), так, чтобы означал каждую страницу, которая соединяется с базой данных, будет иметь задержку 2 секунд при загрузке..

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

Установка пара ключей SSH . Затем с помощью autossh или простой сценарий, который выполнил бы необходимую команду SSH, ожидает, пока процесс не умер, и запустите его снова. Это могло быть более интеллектуальным и попытаться выполнить команду каждые 10-20 секунд, снова соединившись, если это перестало работать.

Используя пару ключей SSH, у Вас не было бы к hardcode пароля удаленных пользователей в сценарии. Я рекомендовал бы ограничить то, что может сделать удаленный пользователь (при помощи преданного туннельного пользователя и предоставления его ограниченная оболочка, см. этот вопрос)

Короче говоря, я настоятельно рекомендовал бы пробовать SQLite сначала, затем видеть как выполнимый это, чтобы хранить данные с помощью XML-файлов, затем попытаться прослушивать веб-хост о получении локального сервера MySQL, затем изучают SSH туннелирующая опция.

3
ответ дан 30 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: