使用Fabric如何为psql提供密码?

4

我希望能够从远程机器登录到我的 AWS postgres 数据库。 我正在使用以下 Fabric 脚本:

import sys
from fabric.api import env, run, abort

env.port = 123
env.use_ssh_config = True

def setuser(user):
    """Sets the ssh user for the fabric script"""
    env.user = user
    env.password = 'mypassword'

def setenv(server):
    """Sets the environment for the fabric script"""
    env.hosts = ['staging']

def sync():
    # log into AWS server
    run("psql --host=staging.xxx.rds.amazonaws.com --username=x_user  --port=5432 --password --dbname=x_database")
    run("mypassword")

我使用以下命令运行这个 Fabric 脚本:

fab -f sync_staging.py sync --password=mypassword

这会将我登录到远程计算机,运行命令 run("psql ....,然后会提示我输入密码:

[stage] out: Password for user x_user: 

有没有办法可以提供密码(或响应提示),使得我自动登录?

你尝试在pg_hba.conf文件中将数据库配置设置为“trust”了吗?我不确定,但我认为这是必须的,让psql不要要求输入密码。 - yellowcap
我无法编辑 pg_hba.conf 文件,因为 AWS 不允许这样做。 - djq
我刚在RDS控制台上检查了一下,在“参数组”下,您可以更改一堆参数,并且有一个“可修改”标志。 hba.conf文件不可修改,因此可能无法允许IP在没有密码的情况下访问。 - yellowcap
1个回答

4

谢谢您的建议。我刚试着使用 run('export PGPASSWORD=mypassword') 但是这个方法不起作用。 - djq
太棒了!with context_managers.shell_env(PGPASSWORD='mypassword') 生效了。 - djq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接