Capture stdout da sessão ssh para a máquina local

1

Eu estou tendo que montar um script que irá ssh em dispositivos para executar um comando como "show running-config" e salvar a saída em um arquivo na minha máquina local. Eu fiz tarefas semelhantes como esta diretamente da linha de comando e salve o arquivo no meu sistema local. Por exemplo,

ssh [email protected] ls > ls_from_remotes_sys

E o arquivo ls_from_remotes_sys está no meu sistema local. No entanto, vou precisar de script isso e a única maneira que eu sei como fazer isso é com esperar. Então eu juntei isto:

#!/usr/bin/expect -f

spawn ssh [email protected] ls > ls_from_remotes_sys
expect "[email protected]'s password:"
send "password\r"
interact

O script de espera funciona, mas o arquivo é salvo no sistema remoto, o que não é o que eu quero.

Pergunta 1 - Por que o arquivo é salvo no sistema local a partir da linha de comando e por que ele é salvo no sistema remoto com expectativa?

Pergunta 2 - Existe uma maneira de enviar o arquivo para o meu sistema local? (ssh de volta não é uma opção)

Eu estava pensando que talvez, em vez de redirecionar para um arquivo, eu pudesse fazer com que o script exibisse os resultados do comando na minha tela. Então,

Pergunta 3 - Se eu fizer isso, como posso capturar o stdout na minha tela do sistema remoto e enviá-lo para um arquivo no sistema local?

    
por user53029 21.07.2016 / 18:54

1 resposta

4

O comando expect que você usa:

spawn ssh [email protected] ls > ls_from_remotes_sys

Isso chama efetivamente

exec("ssh","[email protected]","ls",">","ls_from_remotes_sys")

Isso significa que os três parâmetros ( ls , > e o nome do arquivo) são enviados para o sistema remoto; ou seja, o redirecionamento acontece no sistema remoto.

Um kludge poderia ser chamado via sh -c "ssh test@...." .

Outra alternativa seria fazer o redirecionamento fora do script expect

e, g: se você chamou isso de "get_ls"

#!/usr/bin/expect -f

spawn ssh [email protected] ls
expect "[email protected]'s password:"
send "password\r"
interact

Então você pode fazer get_ls > ls_from_remotes_sys .

    
por 21.07.2016 / 19:20