通过SSH PHP连接到MySQL数据库

时间:2020-03-28 11:55:01

标签: php mysql ssh

对于我的大学项目,我正在连接到MySQL数据库。从covid 19开始,我无法去uni,所以必须远程进行操作,任何人都可以通过PHP连接进行帮助吗?

SSH主机名:ssh.University.uk:2223 SSH用户名:s4905304 SHH密码:.... SSH密钥文件:空白

MySQL主机名:127.0.0.1 MySQL服务器端口:3306 用户名:s4905304 密码:.....

1 个答案:

答案 0 :(得分:1)

尝试一下:

第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(转到背景)
  • -N(不执行远程命令)
  • -g(允许远程主机连接到本地转发端口)

私钥身份验证,将(-i)开关添加到上面:

-i /path/to/private-key

第2步。

告诉本地MySQL客户端通过计算机(SSH tunnel)上的本地端口3307通过-h 127.0.0.1进行连接,该端口现在转发通过SSH tunnel是您在步骤1中建立的。

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

客户端和服务器之间的数据交换现在通过加密的SSH连接发送,并且很安全。

不建议直接隧道连接到数据库服务器-使数据库服务器可直接从Internet访问是巨大的安全责任。将隧道目标地址设为Jumpbox / Bastion主机的Internet地址(请参阅步骤1中的示例),并将数据库目标为远程网络上数据库服务器的内部 IP地址。 SSH将完成其余的工作。

http://chxo.com/be2/20040511_5667.html

上感谢Chris Snyder的精彩文章

第3步。

正在连接。 DSN

PDO具有一种称为DSN的精美连接方法。没什么 虽然很复杂-而不是一个简单明了的选项列表, PDO要求您输入三个不同的配置指令 不同的地方:

  • database driverhostdb (schema) namecharset,以及不常使用的portunix_socket进入DSN;
  • usernamepassword进入构造函数;
  • 所有其他选项进入选项数组。

其中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