Попробуйте это:
Шаг 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