Todo administrador Linux já teve que executar um comando remotamente via ssh em uma máquina, mas sem efetivamente receber um terminal. Um exemplo seria testar se a hora do servidor está correta:
$ssh host /bin/date Sex Jul 14 14:09:34 BRT 2017
Algumas vezes esse comando requer o uso do “sudo”, você tenta executar o comando e recebe a mensagem:
$ssh host sudo systemctl restart chronyd sudo: sorry, you must have a tty to run sudo
Para contornar esse problema, é necessário permitir que o sudo seja executado sem a existência de um terminal. Para tanto, deve-se criar um arquivo em /etc/sudoers.d:
sudo vim /etc/sudoers.d/01nome_do_usuario
Dentro deste arquivo, basta inserir a seguinte linha:
Defaults:nome_do_usuario !requiretty
Fazendo isso, estamos dizendo que o usuário nome_do_usuario pode executar o sudo sem um terminal.
É importante não liberar o uso de sudo remotamente para todos usuários, isto é uma falha de segurança. Libere somente para quem realmente precisa.
Tenha sempre em mente:
“Bloqueie tudo! So libere o necessário.”
