Laravel MySql 数据库通过 SSH 连接

问题描述 投票:0回答: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'    => '',
    ),
mysql ssh laravel-4
4个回答
56
投票

这是一个可行的解决方案,可以通过 SSH 使用密钥来使用 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 [email protected]

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

第三,像平常在 Laravel 应用程序中一样使用数据库:

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

var_dump($users);

24
投票

我写了一个 Laravel 包来为我们处理。

stechstudio/laravel-ssh-tunnel

composer require stechstudio/laravel-ssh-tunnel

注册

TunnelerServiceProvider::class
并在您的
.env
中设置配置。


4
投票

如果 ssh 服务器只是隧道并且数据库不位于那里。你可以用这个。

ssh -i ~/path/your-key.pem -N -L 13306:your-db-hostname.com:3306 [email protected]

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

127.0.0.1
端口
13306


0
投票

如果您使用带有私钥授权的 Laravel Sail/Docker 通过 SSH 连接到 MySQL 数据库,这里是解决方案。

第一步:

运行以下命令:

ssh -i "YOUR_PUBLIC_KEY_PATH.pem" -N -L 13306:YOUR_DATABASE_HOST:YOUR_DATABASE_PORT SSH_USER@SERVER_ADDRESS
  • -N
    告诉 SSH 不要执行远程命令。

  • -L
    将本地端口 13306 转发到 mysql 端口

  • -i
    指定您的私钥路径。

一旦你按下命令,如果 命令运行成功。

第二步

更新 docker-compose.yml 文件中的

laravel.test
服务以允许另一个端口
13306

 ports:
       
        - "13306:13306"

重建容器

第三步:

更新您的

.env
文件中的以下条目:

DB_HOST=host.docker.internal
DB_PORT=13306
DB_USERNAME="keep the same as your db username"
DB_PASSWORD="keep the same as your db password"

此设置将指示 Laravel 连接到转发的本地端口 13306,从而允许通过 SSH 访问远程数据库。

© www.soinside.com 2019 - 2024. All rights reserved.