Como executar comandos sudo remotamente via ssh -t?

4

Eu tenho um script que faz login em um host remoto usando ssh -t e usa sudo service foo restart .

O requisito é evitar a solicitação de uma senha no host remoto. O host remoto é autenticado via certificado SSH. O arquivo sudoers no host remoto permite que o usuário execute o comando de serviço com NOPASSWD .

No entanto, durante meus testes, sou solicitado a fornecer uma senha e isso é inaceitável. Se eu executar isso manualmente sem o sinalizador -t , ele funcionará. No entanto, a bandeira -t joga tudo fora.

Existe alguma maneira de contornar isso?

    
por dperry1973 26.06.2013 / 00:31

3 respostas

4

Talvez desabilitar a opção requiretty em sudoers e executar ssh sem a -t flag (ou com -T ) funcionar.

Adicione algo assim a sudoers (não testado):

Defaults:{your ssh user} !requiretty

Combine isso com o NOPASSWD que você já está usando e você poderá executar o comando sudo sem um pseudo-tty alocado.

Você também pode alterar requiretty para o comando em vez do usuário.

    
por 26.06.2013 / 17:26
0

Gere uma chave SSH e transfira-a para o host remoto.

  1. Use o seguinte comando para gerar uma chave RSA SSH

    [root@localhost ~] ssh-keygen
    
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):  Hit ENTER
    Enter passphrase (empty for no passphrase): Hit ENTER
    Enter same passphrase again: Hit ENTER
    
  2. Encontre /root/.ssh/id_rsa.pub e transfira essa chave para remoto usando o seguinte comando:

    ssh-copy-id -i /root/.ssh/id_rsa.pub root@remote:/root
    

Agora tente fazer o login; não pedirá sua senha remota.

    
por 26.06.2013 / 10:21
0

Para mim, funcionou bem assim, mas com aviso sobre: O Pseudo-terminal não será alocado porque o stdin não é um terminal

ssh -t username@hostname1 << 'EOS'
sudo sh
hostname
EOS

Pseudo-terminal will not be allocated because stdin is not a terminal.
hostname1
    
por 19.05.2016 / 09:23