Estou tentando executar um comando como root (via sudo) em um servidor remoto e capturar stdout (mas não stderr) em um arquivo.
por exemplo. Algo parecido com isto:
ssh user@remote "cat /root/file.tar | gzip" > root-file.tar.gz
Exceto que preciso ser root no controle remoto:
ssh user@remote "sudo cat /root/file.tar | gzip" > root-file.tar.gz
root não tem senha e não pode ser logado como, então não posso usar su
ou ssh root@server
.
Quando eu tento o comando acima, recebo:
$ ssh user@remote "sudo cat /root/file.tar | gzip" > root-file.tar.gz
sudo: no tty present and no askpass program specified
Eu adicionei -t
para que ssh aloque um tty, mas então root-file.tar.gz
obtém a saída do sudo (e gzip, mas eu posso --force), então eu acho que está capturando stdout e stderr remotos no stdout local:
$ ssh -t user@remote "sudo cat /root/file.tar | gzip" > root-file.tar.gz
(hangs)
$ cat root-file.tar.gz
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h
[sudo] password for user:
Eu listei comandos específicos usando o NOPASSWD em sudoers, o que funciona bem para scripts que ocorrem regularmente, mas eu acho que eu quero fazer esse tipo de coisa ocasionalmente com comandos arbitrários diferentes, então eu não posso estar sempre adicionando NOPASSWD.