não-interativo ssh sudo… solicita a senha em texto simples

9

Estou executando alguns comandos ssh não interativos. A autenticação ssh é bem cuidada através do agente ssh, mas se eu executar um comando que requer sudo, o prompt de senha no meu terminal é texto sem formatação. Por exemplo:

ssh remotemachine "sudo -u www mkdir -p /path/to/new/folder"

solicitará a senha em texto simples. Alguém sabe como posso obtê-lo para usar o prompt seguro normal ou que posso passar a senha através de um switch? (como então eu posso configurar um prompt seguro deste lado antes de enviar o comando)

Qualquer ajuda é muito apreciada.

    
por Iain 13.03.2011 / 13:06

1 resposta

13

Use ssh -t :

man ssh

-t   Force pseudo-tty allocation. This can be used to execute arbitrary 
     screen-based programs on a remote machine, which can be very useful, 
     e.g. when implementing menu services. Multiple -t options force tty 
     allocation, even if ssh has no local tty.

Então seu comando será

ssh remotemachine -t "sudo -u www mkdir -p /path/to/new/folder"

Se você não quiser digitar a senha, você pode (se tiver permissão para) modificar sudoers usando o comando visudo .

Adicione o parâmetro NOPASSWD: , por exemplo

username ALL=(ALL) NOPASSWD: /bin/mkdir

Se você não conseguir editar o / etc / sudoers, use sudo -S :

man sudo

-S      The -S (stdin) option causes sudo to read the password from
        the standard input instead of the terminal device.  The
        password must be followed by a newline character.

Com isso, o comando seria

echo "your_password" | ssh remotemachine -t \
     "sudo -S -u www mkdir -p /path/to/new/folder"

Lembre-se que isto irá adicionar sua senha ao histórico de comando do seu shell (com bash, que seria ~/.bash_history file).

    
por 13.03.2011 / 13:10