“sudo: desculpe, você deve ter um tty para rodar o sudo” ao usar o sudo em um script remoto

4

Eu quero executar uma série de comandos elevados do sudo em uma máquina remota a partir de um script incorporado. Para simplificar a questão, estou apenas tentando executar o sudo id e obtê-lo para me dizer que é raiz.

Estou encontrando "sudo: desculpe, você deve ter um tty para executar o sudo" quando eu executo este script:

#!/bin/bash
ssh -t 192.168.1.100<<EOF
sudo id
EOF

Mas não quando eu executo isso:

#!/bin/bash
ssh -t 192.168.1.100 sudo id

Como obtenho o primeiro, com as designações de fim de arquivo de um script incorporado para respeitar o tty forçado na outra extremidade do SSH?

    
por Andy 12.06.2014 / 00:23

1 resposta

2

Com o primeiro, não há tty para ssh , pois stdin não está conectado ao terminal, é um arquivo aqui. Na verdade, se eu tentar executar um comando similar (no Debian), recebo o seguinte erro:

Pseudo-terminal will not be allocated because stdin is not a terminal.

Para que funcione, você pode fazer algo como:

ssh -tt 192.168.1.100 <<EOF
sudo -S id
password
EOF

Embora isso não seja uma boa ideia, uma vez que a senha estará em texto simples.

Atualizar

Eu me deparei com uma solução fácil para isso que evita codificar a senha em texto simples, você pode usar um programa gráfico para digitar a senha:

ssh -X 192.168.1.100 <<EOF
SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A id
EOF

É claro que o programa ssh-askpass deve ser instalado no local indicado e você deve estar executando uma sessão X na máquina em que está trabalhando. Existem algumas variações no programa ssh-askpass que também deve funcionar (versões do Gnome / KDE). Além disso, um programa gráfico de substituição de sudo como gksu ou kdesudo deve fazer o trabalho também.

    
por 12.06.2014 / 00:33

Tags