MySQL 通过 SSH 隧道访问被拒绝

标签 mysql pdo ssh ssh-tunnel

我想使用 SSH 隧道连接到远程主机上的 MySQL 数据库。

我已经使用命令设置了隧道:

ssh user@host -L 3307:remote_mysql_hostname:3306

我可以使用以下设置成功连接 HeidiSQL:

hostname: localhost
user: remote_mysql_user_login
password: remote_mysql_user_password
port: 3307

但是当我在 PHP 中使用 PDO 进行连接时,我得到:

Access denied for user 'remote_mysql_user_login'@'localhost' (using password: YES)

我的 PDO Dns 是这样的:

mysql:type=Core_Db_Adapter_Pdo_Mysql;host=localhost;port=3307;dbname=db_name;

诀窍在哪里?


解决方案:

@symcbean谢谢!

问题出在主机名中(如 @symcbean 所建议)。

更改为“127.0.0.1”可以解决问题。**

最佳答案

我借鉴了您的示例,并且能够使用相同的 SSH 隧道设置连接到远程主机。您可以分享您正在使用的 PHP 脚本来获取有关您的设置的更多信息吗?

对于要连接的远程数据库,您可以尝试使用“localhost”以外的主机名。

设置 ssh 隧道 - 我在/etc/hosts 中为 my_db_host_name 设置一个条目,而不是使用 localhost

ssh my_user@my_remote_host -L 3307:my_db_host_name:3306

<?php

$dsn = 'mysql:host=my_db_host_name;dbname=my_db;port=3307';
$username = 'my_user';
$password = 'my_pass';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn, $username, $password, $options);

$result = $dbh->query("select * from my_table");

try {
    foreach($result as $row) {
        echo "column1: " . $row['column1'];
    }
} catch (PDOException $pde) {
    echo "PDO exception: $pde";
}

echo "done \n";

?>

关于MySQL 通过 SSH 隧道访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22691472/

相关文章:

mysql - 通过忽略变量 CSV 列将 CSV 批量导入 MySQL

mysql - 将两个mysql表合并成第三个表

java - ganymed SSH2 java

php - 为什么这个查询在 Mysql 中不起作用?

php - 简单的 php - Mysql 搜索无法正常工作

php - 如何正确创建 PDO 准备的 SQL 语句以使用数组进行 UPDATE

php - "Unknown column in ' 字段列表 '"当准备语句的占位符在子查询中

javascript - jQuery/AJAX post() - 一些问题

hadoop - 不能 ssh 权限被拒绝。 HBase Hadoop

linux - SSH 和 Session(KDE、Gnome 等)的不同密码