Php-pdosh隧道

Php-pdosh隧道,php,database,pdo,connection,ssh-tunnel,Php,Database,Pdo,Connection,Ssh Tunnel,现在我正在创建一个ssh隧道,这样我就可以连接到我的远程数据库,但由于某种原因,连接仍然被拒绝。。。 我的剧本: try { $host = 'remote host'; $sshuser = 'ssh user'; $sshpass = 'ssh password'; $dbuser = 'db user'; $dbpass = 'db user'; $dbname = 'db name'; shell_exec("ssh -p$ss

现在我正在创建一个ssh隧道,这样我就可以连接到我的远程数据库,但由于某种原因,连接仍然被拒绝。。。 我的剧本:

try {

    $host = 'remote host';
    $sshuser = 'ssh user';
    $sshpass = 'ssh password';
    $dbuser = 'db user';
    $dbpass = 'db user';
    $dbname = 'db name';

    shell_exec("ssh -p$sshpass ssh -o StrictHostKeyChecking=no -f -L 3307:127.0.0.1:3306 $sshuser@$host");

    $dbh = new PDO('mysql:host=127.0.0.1;port=3307;dbname=' .$dbname. '', $dbuser, $dbpass);

    $sth = $dbh->prepare("SELECT * from table");

    $sth->execute();

    $result = $sth->fetchAll();

    print_r ($result);

    shell_exec("kill $(ssh-pid)");

    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

-p$sshpassssh
ssh命令的这一特定部分对我来说似乎有点奇怪。
-p
后面可能应该有一个空格,
ssh
也不应该在那里

另外,
-p
选项用于端口,而不是密码。

这对我来说很有用 虚拟机和VPN

如果您有一个虚拟机,则首先使用ssh连接到该虚拟机。
如果您遇到DNS问题,请使用google DNS:
sudo nano/etc/resolv.conf
127…
更改为
8.8.8.8

我的隧道要求我通过vpn连接,我使用了openvpn,您可以这样安装:

sudo yum -y install openvpn
ps aux | grep ssh
sudo kill 123123 // replace 123123 with the id of the process
连接到vpn 从vpn提供商下载myconfig.ovpn

sudo openvpn --config myconfig.ovpn 
SSH密钥

将密钥上载到虚拟机 修复权限

sudo chmod 600 ~/.ssh/my-private-ssh-key
前向端口

ssh -f -N -i ~/.ssh/my-private-ssh-key yourname@yoursshserverdomain.com -L 3307:yourmysqldbdomain.com:3306
-f
将在后台运行它
-L
将转发
127.0.0.1:3307
指向
yourmysqldbdomain.com:3306

请注意,在我的情况下,使用
localhost
不起作用,必须对当前虚拟机本地ip使用
127.0.0.1

您可以删除
-f
-L
条件,改为添加
-v
进行一些调试,如下所示

ssh -v -i ~/.ssh/my-private-ssh-key yourname@yoursshserverdomain.com
连接mysql

mysql -u yourdbusername -h 127.0.0.1 -P 3307 -p
连接PHP PDO

$db_server='127.0.0.1';
$db_port='3307';
$db_name='yourdbname';
$db_user='yourdbusername';
$db_pass='yourdbpassword';
$dsn='mysql:host='。$db_server';dbname=“.$db_name”;端口='。$db_端口;
$driver\u选项=[
PDO::MYSQL_ATTR_INIT_命令=>“设置名称‘utf8’”,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_异常,
PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,
PDO::ATTR_TIMEOUT=>5,//以秒为单位的超时
];               
$pdo=新pdo($dsn、$db_用户、$db_通行证、$driver_选项);
删除端口转发

完成后,可以通过如下方式查找id终止进程:

sudo yum -y install openvpn
ps aux | grep ssh
sudo kill 123123 // replace 123123 with the id of the process

ssh隧道是否保持活动状态?数据库服务器是否已在端口3307上本地运行?该用户真正的MySQL服务器连接/身份验证权限是什么?您找到解决方案了吗?