Eu tenho um shell script interativo, que em um local precisa 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 executar como observado no script):
# ...
ssh remote-machine 'sudo ls'
# ...
No entanto, sempre recebo essa mensagem de erro de volta:
sudo: no tty present and no askpass program specified
OK, está bem claro. Mas como posso contornar isso? Algo assim deve acontecer:
$ ssh remote-machine 'sudo ls /'
[sudo] password for user1:
/bin
/etc
/var
ls
a saída conterá \ r \ n finais, por exemplo.ls | cat
vai fazer - vai ver que stdout é um cachimbo. Nesta questão específica, isso não é relevante, pois aparentemente pretende ser executado de forma interativa a partir de um terminal - então você provavelmente deseja as colunas e as cores e outros enfeites.Este método executará um único script usando o sudo após o ssh:
Vamos supor que temos um usuário "remoto" com recursos de sudo e temos um script que queremos que seja executado 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", executamos o script que queremos executar como "sudo":
Normalmente, ele solicitará a senha duas vezes: ssh login + sudo. Se você deseja inseri-lo apenas uma vez, tente sudo sem senha (não recomendado). <- leia o comentário de Boldewyn.
A principal vantagem é que "ssh" não requer nenhum outro parâmetro (como -t) e o sudo é forçado no lado do servidor. Além disso, uma vez que o script é encerrado, o usuário também é desconectado.
Pode não ser tão elegante, mas é simples e funciona.
fonte
sudoers
arquivo em um servidor como esse é uma catástrofe que está prestes a acontecer. Se alguém obtém acesso como seu usuário (por exemplo, através do servidor da Web), ele pode se tornar root imediatamente . Obrigado, mas eu estava procurando soluções que não colocam em risco a configuração do meu servidor. Se você tivesse uma solução, que de alguma forma reutilize magicamente a autenticação do SSH para osudo
comando, eu ficaria mais interessado (e talvez comece a procurar substituições para o SSH ...).Você pode executar o seguinte comando para obter acesso root sem interatividade:
fonte