【问题标题】:django db with ssh tunnel带有 ssh 隧道的 django db
【发布时间】:2022-01-17 22:49:53
【问题描述】:

是否有 python 本地方式通过 ssh 隧道将 django 连接到数据库?我见过有人在主机中使用 ssh 端口转发,但我更喜欢可以轻松容器化的解决方案。

【问题讨论】:

    标签: python django ssh-tunnel


    【解决方案1】:

    它非常无缝。

    要求: sshtunnelhttps://github.com/pahaz/sshtunnel

    1. 在 django settings.py 的 django DB 设置块之前创建一个 ssh 隧道:
    # Connect to a server using the ssh keys. See the sshtunnel documentation for using password authentication 
    ssh_tunnel = SSHTunnelForwarder(
        SERVER_IP,
        ssh_private_key=PATH_TO_SSH_PRIVATE_KEY,
        ssh_private_key_password=SSH_PRIVATE_KEY_PASSWORD,
        ssh_username=SSH_USERNAME,
        remote_bind_address=('localhost', LOCAL_DB_PORT_ON_THE_SERVER),
    )
    ssh_tunnel.start()
    
    1. 然后在settings.py 中添加DB 信息块。在这里,我添加了一个默认的本地数据库和我们使用 ssh 隧道连接到的远程数据库
    DATABASES = {
        'default': {
            'ENGINE': 'django.contrib.gis.db.backends.postgis',
            'HOST': NORMAL_DB_HOST,
            'PORT': NORMAL_DB_PORT,
            'NAME': NORMAL_DB_NAME,
            'USER': NORMAL_DB_USER,
            'PASSWORD': NORMAL_DB_PASSWORD,
        },
        'shhtunnel_db': {
            'ENGINE': 'django.contrib.gis.db.backends.postgis',
            'HOST': 'localhost',
            'PORT': ssh_tunnel.local_bind_port,
            'NAME': REMOTE_DB_DB_NAME,
            'USER': REMOTE_DB_USERNAME,
            'PASSWORD': REMOTE_DB_PASSWORD,
        },
    }
    

    就是这样。现在可以使用$ python manage.py migrate --database=shhtunnel_db 之类的命令迁移到远程数据库,或者使用Models.objects.all().using('shhtunnel_db') 之类的行从python 代码中调用数据库

    额外: 就我而言,远程数据库是由其他人创建的,我只想阅读它。为了避免编写模型和停用模型管理器,我使用以下 django 命令从数据库 [src] 中获取模型:

    python manage.py inspectdb
    

    【讨论】:

    • 能否发布default DB 连接的示例?我想使用 SSH 隧道将 Django 的 default DB 连接到远程 DB。
    • 我猜在default 键下使用ssh隧道数据库配置会按预期工作
    • 如果您可以发布一个相同的示例。我有 pem 文件,但 SSH 隧道不需要密码。如果我传递一个空白密码。然后,它无法进行身份验证。我们的 SSH 隧道不需要密码来连接一个 pem 文件。我能够使用 pem 文件和 SSH 命令在命令行上连接。
    猜你喜欢
    • 2019-04-14
    • 2021-10-29
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2022-01-27
    • 2017-02-23
    • 2019-08-07
    • 1970-01-01
    相关资源
    最近更新 更多