Подключение к базе данных MySQL через S SH PHP - PullRequest
0 голосов
/ 28 марта 2020

Для моего университетского проекта я подключаюсь к базе данных MySQL. Начиная с 19, я не могу go в универе, поэтому приходится делать это удаленно, может кто-нибудь помочь с подключением PHP?

S SH Имя хоста: s sh .University.uk: 2223 S SH Имя пользователя: s4905304 SHH Пароль: .... S SH Файл ключа: пусто

MySQL Имя хоста: 127.0.0.1 MySQL Порт сервера: 3306 Имя пользователя: s4905304 Пароль :. ....

1 Ответ

1 голос
/ 28 марта 2020

Попробуйте это:

Шаг 1.

Установите SSH tunnel для вашего MySQL сервера базы данных (предпочтительно, через Jumpbox для безопасности ).

ssh -fNg -L 3307:10.3.1.55:3306 username@ssh_jumpbox.com 

Ключ здесь -L, который говорит о том, что мы делаем переадресацию локального порта.

Синтаксис переадресации локального порта

<local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end>
username@ssh_proxy_host.com 

Другие ключи:

  • -f (go в фоновом режиме)
  • -N (не выполнять удаленную команду)
  • -g (разрешить удаленным хостам подключаться к локальным перенаправленным портам)

Аутентификация с закрытым ключом, добавить (-i) к вышеприведенному значению:

-i /path/to/private-key

Шаг 2.

Сообщите вашему локальному клиенту MySQL подключиться через ваш SSH tunnel через локальный порт 3307 на вашем компьютере (-h 127.0.0.1), который теперь пересылает все traffi c, отправленный ему через SSH tunnel, установленный на шаге 1.

mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase

Обмен данными между клиентом и сервером теперь отправляется через зашифрованное соединение S SH и является безопасным.

* 105 2 * Туннелирование напрямую на сервер базы данных не рекомендуется - наличие сервера базы данных, напрямую доступного из inte rnet, является огромной угрозой безопасности. Сделайте целевой адрес туннеля целым rnet адресом вашего хоста Jumpbox / Bastion (см. Пример в шаге 1), а целевой базой данных будет IP-адрес внутренний вашего сервера базы данных в удаленной сети. S SH сделает все остальное.

Благодарим великую статью Криса Снайдера в http://chxo.com/be2/20040511_5667.html

Шаг 3.

Подключение. DSN

PDO имеет необычный метод подключения DSN. В этом нет ничего сложного - вместо одного простого и простого списка опций PDO просит вас ввести разные директивы конфигурации в трех разных местах:

  • database driver, host, db (schema) name и charset, а также менее часто используемые port и unix_socket go в DSN;
  • username и password go для конструктора;
  • все другие параметры go в массив параметров.

, где DSN - строка, разделенная точкой с запятой, состоит из param=value пар, начинающихся с имени драйвера и двоеточия:

       mysql:host=localhost;dbname=test;port=3306;charset=utf8mb4
driver^    ^ colon         ^param=value pair    ^semicolon  

Обратите внимание, что важно следовать правильному формату - в DSN не нужно использовать пробелы, кавычки или другие декорации, а только параметры, значения и разделители, как показано в руководстве .

Вот пример для MySQL:

 $host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

Цитируется из: https://phpdelusions.net/pdo#dsn

...