web-dev-qa-db-fra.com

Utiliser Expect in Bash pour définir le mot de passe utilisateur "postgres" initial?

Suite au tutoriel ici: http://www.unixmen.com/install-postgresql-9-4-phppgadmin-ubuntu-14-10/

Je suis en train d'écrire l'installation de PostgreSQL dans bash, mais j'ai un problème pour définir le mot de passe utilisateur initial.

Après le tutoriel pour cette partie nous avons:

# Login to postgresql Prompt:
Sudo -u postgres psql postgres

# .. and set postgres password with following command:
postgres=# \password postgres 
Enter new password: 
Enter it again: 
postgres=# \q

Ce qui est génial, mais je veux définir ce mot de passe à partir du script Bash et une façon dont ce type de tâche pourrait généralement utiliser Expect:

# Build the command into a variable so that we can run it later
PSQL_QUERY=$(expect -c "

set timeout 10
spawn -u postgres psql postgres -c '\\\password postgres'

expect \"Enter new password:\"
send \"password\r\"

expect \"Enter it again:\"
send \"password\r\"

expect eof
");
# Run the command with automated entry
echo "$PSQL_QUERY";

Mais lorsque j'essaie d'exécuter le script, la sortie est la suivante:

root@node:/home/user# ./test.sh 
send: spawn id exp6 not open
    while executing
"send "password\r""
spawn Sudo -u postgres psql postgres -c '\password postgres'
psql: FATAL:  Peer authentication failed for user "postgres'"

Ce que je ne comprends pas vraiment à la fois parce que je suis nouveau dans PostgreSQL et parce que quand j’exécute ce qui suit:

root@node:/home/user# Sudo -u postgres psql postgres -c '\password postgres'
Enter new password: <password>
Enter it again: <password>

Ça marche. Est-ce que quelqu'un pourrait m'aider à comprendre où je me trompe et comment je pourrais le faire correctement afin de pouvoir définir le nouveau mot de passe utilisateur "postgres" à partir d'un script bash. Merci d'avance!

4
Craig van Tonder

Beaucoup plus facile:

Sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{password}';"

Documentation sur psql (terminal interactif PostgreSQL).

5
Rinzwind