Como obter o prompt de senha do script ssh in Perl

1

Quando eu executo isso a partir da linha de comando, sou solicitado pela senha do joe (que é o que eu quero):

ssh -t 192.168.1.32 'scp [email protected]:/etc/hosts /tmp'

Quando tento executar o mesmo comando a partir de um script perl, ele fica pendurado (sem prompt):

'ssh -t 192.168.1.32 'scp joe\@192.168.1.31:/etc/hosts /tmp'';

Como posso fazer isso funcionar a partir de um script Perl?

Observação: não, não posso usar a autenticação baseada em chave para isso.

    
por Zek 13.11.2013 / 20:18

3 respostas

5

Você pode usar o Expect. Consulte o link

(e as perguntas frequentes sobre o módulo Esperar sobre este tópico link ...)

    
por 13.11.2013 / 20:27
2

Você poderia usar o Net::SCP para esse Perl, que seria o solução mais limpa (all-perl, sem chamadas de comandos externos).

Ou você pode fazer como Andrew sugere e usar o Expect (que provavelmente é mais rápido).

Ou você poderia fork() , exec() e waitpid() (deixar seu comando scp ter o terminal do qual seu script Perl está sendo executado para que possa obter senhas de você, que é um bom Unix antigo -a abordagem, mas muito mais trabalho do que eu estaria disposto a fazer pessoalmente).

TIMTOWTDI. : -)

    
por 13.11.2013 / 21:35
0

Eu tive exatamente o mesmo tipo de problemas há algum tempo.

A razão pela qual ele trava é porque o ssh gera um terminal para a entrada de senha. Perl não pode pegar este terminal (por motivo). A string "Password" nunca é vista pelo perl.

É melhor usar as libs (bibliotecas Net :: SSH2 ou algo similar).

    
por 06.12.2013 / 07:21

Tags