Digitando a senha do sudo para um script executado remotamente
Estou tentando desenvolver um script que atualiza minhas VMs em uma rede local. O objetivo é que cada VM baixe o script e execute-o.
Consegui usar o curl para baixar o script e executá-lo, mas ainda recebo um prompt para inserir a senha do sudo.
Isso funciona:
sshpass -p 'password' ssh -t -t [email protected] 'curl -s 192.168.1.15/upgrade.sh | sudo sh'
Mas ainda preciso inserir uma senha novamente quando chegar ao comando sudo.
Eu tentei:
sshpass -p 'password' ssh -t -t [email protected] 'curl -s 192.168.1.15/upgrade.sh | echo 'password' | sudo sh'
O que leva ao seguinte:
[sudo] password for aaron: (23) Failed writing body
O que posso fazer para passar a senha para o prompt de senha do sudo?
Respostas
Basicamente, há uma série de opções, cada uma com seus prós e contras. Depende um pouco de quão "local" sua rede é e de quão durável sua solução deve ser.
Sudo sem senha. Permitir o sudo sem senha do usuário na máquina de destino. Tanto para tudo (
put "nameofuser ALL=(ALL) NOPASSWD: ALLem/etc/sudoersusovisudonas máquinas de destino) ou permitir apenas comandos específicos. Observe que todos com acessonameofuserna máquina alvo praticamente têm acesso root na máquina (nem todos na máquina como @terdon sugeriu nos comentários).Permita que o usuário na máquina de controle faça ssh como root na máquina de destino. Coloque a chave pública do usuário controlador no
authorized_keysarquivo na máquina de destino. Isso significa que o usuário específico na máquina de controle tem acesso root em todas as VMs.Olhe para Ansible (ou Puppet, Chef, etc.). Eles já resolveram mais ou menos esse problema para você. O Ansible tem uma curva de aprendizado suave (em menos de um dia você poderá realmente usá-lo).
Se for algo sério por um longo período, escolha a opção 3. Se for apenas sua própria rede local onde você está experimentando, 1 ou 2 bastarão.