Eu executei as coisas como root sobre o ssh usando:
ssh -t you@server <<EOF
echo pass_for_you | sudo -S bash -c "commands to do as root";
EOF
Estou tentando conectar-me a vários servidores para alterar a senha de um usuário específico.
Espero que você possa me ajudar a construir um script para fazer isso, a complexidade é que eu tenho que usar o sudo e enviar a senha para conectar no servidor remoto como root.
Estou tentando algo assim, mas não está funcionando:
sshpass -p pass ssh user@server << EOF
echo pass | sudo -S -u root "echo 'user2:pass2' | chpasswd"
EOF
Para explicar melhor o que quero fazer, estas são as etapas que preciso fazer:
Este é o erro:
Pseudo-terminal will not be allocated because stdin is not a terminal. stat: cannot stat 'pipe:[2670580091]': No such file or directory [sudo] password for user1: sudo: echo 'user2:XXXXXXX' | chpasswd: command not found
Eu executei as coisas como root sobre o ssh usando:
ssh -t you@server <<EOF
echo pass_for_you | sudo -S bash -c "commands to do as root";
EOF
isso ajudaria? ou algo similar? assumindo que entendi o que você está tentando fazer?
for i in server{1,2,3}; do
ssh -t user@$i 'sudo passwd user2'
done
O ansible module "user" deve funcionar para o seu problema. Mas você precisa fornecer o hash de senha já criptografado. Faça o hash com:
mkpasswd --method=sha-512
Execute um comando adhoc ansible como este com a hash-string gerada entre aspas:
ansible -v all -i <hostname>, --become --extra-vars 'ansible_become_pass=<sudo password> ansible_password=<sudo password>' --user=<ssh user> -k -m user --args='name=root update_password=always password="$6$IZjuXoio1$zHpQQDZGDPwG8mr2R6Mrt1C8Nqstui75enT/o0oSVJ3M6rqff8993kmAaTgbc9q9HTgPD2jtZukEqgeIGKfUN0"'
Pré-requisitos: ansible e sshpass na máquina do cliente.