使用SSH的Laravel MySql DB连接

时间:2014-08-25 22:34:11

标签: mysql ssh laravel-4

我想要访问几个远程数据库,但它们只能通过带密钥的SSH访问服务器。

在Sequel Pro中,我连接到这个远程数据库,如下所示: enter image description here

如何配置我的Laravel应用程序以连接到这样的数据库?

'mysql_EC2' => array(
        'driver'    => 'mysql',
        'host'      => '54.111.222.333',
        'database' => 'remote_db',
        'username' => 'ubuntu',
        'password' => 'xxxxxxxxxxxxxxxxxxxx',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

3 个答案:

答案 0 :(得分:30)

这是一个可行的解决方案,通过SSH w / a密钥在EC2实例上托管数据库。

首先,在数据库配置中设置相应的连接:

'mysql_EC2' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1:13306',
        'database' => 'EC2_website',
        'username' => 'root',
        'password' => 'xxxxxxxxxxxxxxxx',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

第二,建立隧道:

ssh -i ~/dev/awskey.pem -N -L 13306:127.0.0.1:3306 ubuntu@54.111.222.333

(我们将SSH密钥传递给i参数并建立SSH连接,绑定到端口13306)

第三,在Laravel应用程序中使用DB通常的方式:

$users = DB::connection('mysql_EC2')
        ->table('users')
        ->get();

var_dump($users);

答案 1 :(得分:8)

我为我们写了一个Laravel包。 stechstudio/laravel-ssh-tunnel

composer require stechstudio/laravel-ssh-tunnel

注册TunnelerServiceProvider::class并在.env

中设置配置

答案 2 :(得分:0)

如果 ssh 服务器只是隧道而数据库不在那里。你可以用这个。

ssh -i ~/path/your-key.pem -N -L 13306:your-db-hostname.com:3306 your-ssh-tunnel-username@your-tunnel-hostname.com

并将您的 Laravel .env 或数据库配置文件中的数据库主机名设置为 127.0.0.1 端口 13306

相关问题