Possível canalizar comando usando su via ssh

3

Estou tentando escrever um script python para atualizar remotamente as senhas de login de um conjunto de contas que administro - já posso usar com êxito o python para enviar comandos remotos por meio do stdin de um processo ssh. No entanto, quero testar se a senha remota está configurada corretamente. Eu posso fazer isso eu posso fazer isso remotamente segue:

[localhost]% ssh -t -o RequestTTY=true  user@host
[host]% su user -c true

e forneça a senha no prompt. Isso funciona, mas se eu tentar o seguinte remotamente:

 [localhost]% echo "su user -c true" |  ssh -t -o RequestTTY=true  user@host

Eu recebo:

su: must be run from a terminal

Note que isso não está falhando porque o su precisava de uma senha (que eu eventualmente fornecerei via python) - ela falha antes disso. su não gosta de passar por um tubo dessa maneira.

O que está acontecendo e como posso canalizar a entrada para um comando su remoto? (ou remotamente testar se uma senha está correta para algum usuário).

    
por user48956 22.07.2015 / 20:08

1 resposta

1

Insira a senha no su , que por sua vez é canalizado para ssh .

Exemplo abaixo. Note como o foopass é a senha correta para o usuário foo, então ele executa o comando id felizmente. Note como badpass é a senha errada para o usuário foo, então gera falha de autenticação.

$ echo "echo foopass | su foo -c id" | ssh -t -o RequestTTY=yes steve@localhost
Pseudo-terminal will not be allocated because stdin is not a terminal.
Password: uid=1001(foo) gid=1003(foo) groups=1003(foo) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ echo "echo badpass | su foo -c id" | ssh -t -o RequestTTY=yes steve@localhost
Pseudo-terminal will not be allocated because stdin is not a terminal.
Password: su: Authentication failure
$
    
por 22.07.2015 / 23:27