Usando Expect Bash para definir a senha do usuário “postgres” inicial?

4

Seguindo o tutorial aqui: link

Estou programando a instalação do PostgreSQL no bash, mas tendo um problema quando se trata de definir a senha do usuário inicial.

Seguindo o tutorial desta parte, temos:

# 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

O que é ótimo, mas eu quero definir essa senha do script Bash e uma forma com a qual esse tipo de tarefa poderia geralmente usar seria 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";

Mas quando tento executar o script, recebo a seguinte saída:

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'"

O que eu realmente não entendo é porque eu sou novo no PostgreSQL e porque quando executo o seguinte:

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

Funciona. Alguém poderia me ajudar com a compreensão de onde eu estou indo errado com isso e como eu poderia fazer certo para que eu possa definir a nova senha de usuário "postgres" de dentro de um script bash. Obrigado antecipadamente!

    
por Craig van Tonder 15.10.2015 / 11:29

1 resposta

5

Muito mais fácil:

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

Documentação no psql (terminal interativo do PostgreSQL).

    
por Rinzwind 15.10.2015 / 11:43