试试这个:
第 1 步。
为您的MySQL 数据库服务器设置SSH tunnel(为了安全起见,最好通过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(转到后台)
- -N(不执行远程命令)
- -g(允许远程主机连接到本地转发端口)
私钥认证,上面加(-i)开关:
-i /path/to/private-key
第 2 步。
告诉您的本地 MySQL 客户端通过您的计算机 (-h 127.0.0.1) 上的本地端口 3307 通过您的 SSH tunnel 连接,该端口现在转发通过您在步骤 1 中建立的 SSH tunnel 发送给它的所有流量.
mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase
客户端和服务器之间的数据交换现在通过加密的 SSH 连接发送并且是安全的。
不建议直接通过隧道连接到您的数据库服务器 - 让数据库服务器直接从 Internet 访问是一项巨大的安全责任。将隧道目标地址设置为 Jumpbox/Bastion 主机的 Internet 地址(参见步骤 1 中的示例),并将数据库的目标设置为远程网络上数据库服务器的 internal IP 地址。 SSH 将完成剩下的工作。
感谢 Chris Snyder 的精彩文章 http://chxo.com/be2/20040511_5667.html
第 3 步。
正在连接。 DSN
PDO 有一种奇特的连接方法,称为 DSN。没什么
虽然很复杂 - 而不是一个简单明了的选项列表,
PDO 要求你输入三个不同的配置指令
不同的地方:
-
database driver、host、db (schema) name和charset,以及使用频率较低的port和unix_socket进入DSN;
-
username 和 password 转到构造函数;
- 所有其他选项都进入选项数组。
其中DSN 是分号分隔的字符串,由param=value 组成
对,以驱动程序名称和冒号开头:
mysql:host=localhost;dbname=test;port=3306;charset=utf8mb4
driver^ ^ colon ^param=value pair ^semicolon
请注意,遵循正确的格式很重要 - 没有空格或
DSN 中必须使用引号或其他装饰,但仅限
参数、值和分隔符,如manual所示。
下面是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