Eric,
я думаю, что Вам не повезло на этом. Можно или использовать ssh расширение в коде PHP, или если у Вас есть доступ к серверу, Вы могли бы попытаться создать туннель ssh на командной строке.
Вам, вероятно, нужны специальные полномочия сделать это, все же. Также похоже, что у Вас нет ssh доступа к этому хостинг-аккаунту.
- Joao
Я использовал бы инструмент autossh для создания персистентного туннеля ssh к mysql базе данных. Затем все, что необходимо сделать в коде PHP, является точкой он к localhost.
можно протестировать это (без автоматического перезапуска) путем выполнения:
ssh -L 3306:localhost:3306 user@domain.com
Установка ssh ключ так, чтобы Вы не должны были использовать пароли и настроить .ssh/authorized_keys файл в mysql системе, чтобы только позволить этому использоваться для перенаправления портов.
Для большего количества информации о приемах ssh см. Brian Hatch превосходный ряд на SSH и перенаправлении портов.
Я попробовал его путем выполнения 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 конкретно.
Я думаю, что Ваш лучший выбор состоит в том, чтобы найти другого поставщика услуг хостинга; я предлагаю решение VPS (Виртуальный Частный Сервер), который дает Вам полный контроль над Вашим веб-хостом. Тот путь, если Вам не нравится конфигурация по умолчанию, можно обновить ее сами.
Это возможно, но почему? Это более сложно, чем это должно быть, и подвержено ошибкам.
разве Вы не можете выполнить базу данных локально? В противном случае разве Вы не можете использовать что-то как SQLite, XML-файлы или что-то еще, что не требует отдельного демона сервера?
Вы действительно не хотите инициализировать туннель в Сценариях PHP. Инициализация туннеля SSH занимает много времени (может легко быть секунда или два), так, чтобы означал каждую страницу, которая соединяется с базой данных, будет иметь задержку 2 секунд при загрузке..
, Если Вы имеете , чтобы сделать это (против которого я настоятельно рекомендую), лучший метод должен был бы иметь сценарий, который поддерживает соединение в фоновом режиме..
Установка пара ключей SSH . Затем с помощью autossh или простой сценарий, который выполнил бы необходимую команду SSH, ожидает, пока процесс не умер, и запустите его снова. Это могло быть более интеллектуальным и попытаться выполнить команду каждые 10-20 секунд, снова соединившись, если это перестало работать.
Используя пару ключей SSH, у Вас не было бы к hardcode пароля удаленных пользователей в сценарии. Я рекомендовал бы ограничить то, что может сделать удаленный пользователь (при помощи преданного туннельного пользователя и предоставления его ограниченная оболочка, см. этот вопрос)
Короче говоря, я настоятельно рекомендовал бы пробовать SQLite сначала, затем видеть как выполнимый это, чтобы хранить данные с помощью XML-файлов, затем попытаться прослушивать веб-хост о получении локального сервера MySQL, затем изучают SSH туннелирующая опция.