如果在 keyvault 中使用管理员密码创建,则无法 psql 连接 azure postgres 服务器
Cannot psql-connect azure postgres server if created with admin-password in keyvault
我一直在尝试使用密钥保管库中的管理员密码创建 azure postgres 服务器。使用通过命令 az keyvault secret show
获得的秘密我总是无法从我的电脑连接服务器。当使用在创建命令中存储为密钥保管库机密的相同文本字符串时,从我的 PC 连接时我没有任何问题。
jaana@Azure:~$ az postgres server create --location westeurope --resource-group my-rg --name fortunate-postgres-server --admin-user adminU --admin-password changeMe+1 --sku-name B_Gen5_1
jaana@Azure:~$ secret=$(az keyvault secret show --name "AdminPassWord" --vault-name unfortunate-kv --query "value"
jaana@Azure:~$ echo $secret
"changeMe+1"
jaana@Azure:~$ az postgres server create --location westeurope --resource-group my-rg --name unfortunate-postgres-server --admin-user adminU --admin-password $secret --sku-name B_Gen5_1
在我的电脑中:
$ psql "host=fortunate-postgres-server.postgres.database.azure.com port=5432 dbname=postgres user=adminU@fortunate-postgres-server password=changeMe+1 sslmode=require"
psql (9.2.2, server 9.6.21)
WARNING: psql version 9.2, server version 9.6.
Some psql features might not work.
WARNING: Console code page (850) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
SSL connection (cipher: ECDHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
postgres=> \q
$ psql "host=unfortunate-postgres-server.postgres.database.azure.com port=5432 dbname=postgres user=adminU@unfortunate-postgres-server password=changeMe+1 sslmode=require"
psql: FATAL: password authentication failed for user "adminU"
这怎么可能?
只需将 -o tsv
添加到命令 az keyvault secret show
中即可解决问题
只需在@Jaana 的回答中添加解释即可。
在这种情况下,有一个双引号的问题,如果你使用 az keyvault secret show
没有 -o tsv
参数,它会输出带双引号的值,然后当你引用变量时 az postgres server create
,它会传递带双引号的值。
解决问题,-o tsv
是解决方案,输出保证不带引号。
在此处查看详细信息 - https://docs.microsoft.com/en-us/cli/azure/format-output-azure-cli#tsv-output-format
我一直在尝试使用密钥保管库中的管理员密码创建 azure postgres 服务器。使用通过命令 az keyvault secret show
获得的秘密我总是无法从我的电脑连接服务器。当使用在创建命令中存储为密钥保管库机密的相同文本字符串时,从我的 PC 连接时我没有任何问题。
jaana@Azure:~$ az postgres server create --location westeurope --resource-group my-rg --name fortunate-postgres-server --admin-user adminU --admin-password changeMe+1 --sku-name B_Gen5_1
jaana@Azure:~$ secret=$(az keyvault secret show --name "AdminPassWord" --vault-name unfortunate-kv --query "value"
jaana@Azure:~$ echo $secret
"changeMe+1"
jaana@Azure:~$ az postgres server create --location westeurope --resource-group my-rg --name unfortunate-postgres-server --admin-user adminU --admin-password $secret --sku-name B_Gen5_1
在我的电脑中:
$ psql "host=fortunate-postgres-server.postgres.database.azure.com port=5432 dbname=postgres user=adminU@fortunate-postgres-server password=changeMe+1 sslmode=require"
psql (9.2.2, server 9.6.21)
WARNING: psql version 9.2, server version 9.6.
Some psql features might not work.
WARNING: Console code page (850) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
SSL connection (cipher: ECDHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
postgres=> \q
$ psql "host=unfortunate-postgres-server.postgres.database.azure.com port=5432 dbname=postgres user=adminU@unfortunate-postgres-server password=changeMe+1 sslmode=require"
psql: FATAL: password authentication failed for user "adminU"
这怎么可能?
只需将 -o tsv
添加到命令 az keyvault secret show
中即可解决问题
只需在@Jaana 的回答中添加解释即可。
在这种情况下,有一个双引号的问题,如果你使用 az keyvault secret show
没有 -o tsv
参数,它会输出带双引号的值,然后当你引用变量时 az postgres server create
,它会传递带双引号的值。
解决问题,-o tsv
是解决方案,输出保证不带引号。
在此处查看详细信息 - https://docs.microsoft.com/en-us/cli/azure/format-output-azure-cli#tsv-output-format