O maravilhoso ssh
tem uma cura para tudo. O ponto é adicionar o sinalizador -t
para forçar o ssh a alocar uma pseudo-tty:
ssh -t remote-server 'sudo ls'
Eu tenho um script de shell interativo, que em um lugar precisa de ssh para outra máquina (baseada no Ubuntu) e executar algo como root (o usuário deve digitar sua senha, mas o comando remoto deve ser executado como indicado no script):
# ...
ssh remote-machine 'sudo ls'
# ...
No entanto, sempre recebo esta mensagem de erro:
sudo: no tty present and no askpass program specified
OK, isso é bem claro. Mas como posso contornar isso? Algo como isso deveria acontecer:
$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:
/bin
/etc
/var
Este método irá executar um único script usando sudo após ssh:
Vamos supor que temos um usuário "remoto" com recursos de sudo e temos um script que queremos que ele execute como root.
1) Defina um script em / etc / passwd para ser usado no login:
remote:x:1100:1100:Some Remote User,,,:/home/remote:/home/remote/login.sh
2) Dentro de "login.sh", nós executamos o script que queremos executar como "sudo":
#!/bin/bash
if [ "$(id -u)" != "0" ]; then
#Not running as root, so we execute "sudo"
sudo /usr/local/bin/script.sh
else
#We are already rooted, so "sudo" is not required.
/usr/local/bin/script.sh
fi
exit;
Normalmente, ele pedirá a senha duas vezes: ssh login + sudo. Se você quiser entrar apenas uma vez, tente sudo sem senha (não recomendado). < - por favor, leia o comentário de Boldewyn.
A principal vantagem é que o "ssh" não requer nenhum outro parâmetro (-t), e o sudo é forçado no lado do servidor. Além disso, depois que o script é encerrado, o usuário também é desconectado.
Pode não ser tão elegante, mas é simples e funciona.
Você pode executar o seguinte comando para obter acesso root sem interatividade:
ssh server " sudo command" < sudopassword.txt