Esperar que o script faça o login automaticamente, comande e mostre sua saída

1

Sou novo em scripts e preciso de ajuda. Estou criando um script de espera que, de um servidor Linux, irá automaticamente ssh/log para o nosso HP StoreOnce Appliance

#!/usr/bin/expect -f
set password "password"
match_max 1000
spawn ssh -o StrictHostKeyChecking=no [email protected]
expect "*?assword:*"
send -- "$password\r"
send -- "\r"
interact

Ao executar este script, consegui fazer login automaticamente e, a partir disso, posso digitar os comandos.

Por favor, veja a saída abaixo:

=================================================================
[root@dpis tmp]# ./test.exp
spawn ssh -o StrictHostKeyChecking=no [email protected]
Password:
Last login: Thu Jan 26 08:37:24 2017 from 10.x.x.x

Welcome to the HP StoreOnce Backup System Command Line Interface.
Type 'help' at the prompt for context-sensitive help.

>

Mas o que eu quero alcançar é que o script faça o login não apenas automaticamente, mas também coloque automaticamente um comando e mostre sua saída e saia.

Eu tentei adicionar as seguintes linhas abaixo depois da interação

expect ">"

send -- "serviceset show status"

Buscando ajuda sobre como conseguir isso? Obrigado!

    
por Wilfredo Tario 26.01.2017 / 08:36

1 resposta

1

Você tem um bom começo. Depois de esperar digitar o comando, você deve pressionar Enter (enviar o caractere \r ). Então você tem que esperar outro prompt para que os resultados possam ser exibidos

expect ">"
send -- "serviceset show status\r"
expect ">"

Capturar saída em espera é um pouco de PITA. Você pode fazer algo assim:

# at the top of the program
log_user 0
# ... log in ...
expect ">"

set cmd "serviceset show status\r"
send -- $cmd
expect -re "$cmd\n(.*)\r\n>"
set output $expect_out(1,string)
puts $output

# disconnect
send -- "exit\r"
expect eof
    
por 26.01.2017 / 17:08

Tags