@Scott está certo, espere / Tcl não faz nada de especial com backticks, eles são apenas caracteres simples. Isso deve funcionar embora:
#!/bin/expect
set ip [exec curl http://ipecho.net/plain]
spawn fwknop -A tcp/22 -a $ip -D foo.org -P tcp -p 9999
Meu servidor de login está protegido por um firewall que usa a porta para permitir a entrada. O fluxo de login é
Eu posso obter permissão para usar as chaves ssh, mas estou tentando escrever um script que me permitirá reduzir meus tempos de login, já que eu tenho que passar por esse fluxo para cada shell que quero trazer.
#!/bin/expect
spawn fwknop -A tcp/22 -a 'curl http://ipecho.net/plain' -D foo.org -P tcp -p 9999
expect "Enter encryption password:"
send "pass1\r"
spawn ssh -Y [email protected]
expect "[email protected]'s password:"
send "pass2\r"
A execução de cada comando funciona bem na linha de comando. Mas quando tento executar o primeiro comando de spawn
spawn fwknop -A tcp/22 -a 'curl http://ipecho.net/plain' -D foo.org -P tcp -p 9999
Eu recebo erro:
fwknop: fko_set_spa_message: Error 10 - Invalid allow IP address in the SPA message data
send: spawn id exp7 not open
Mas copiar / colar o mesmo comando na linha de comando funciona perfeitamente.
@Scott está certo, espere / Tcl não faz nada de especial com backticks, eles são apenas caracteres simples. Isso deve funcionar embora:
#!/bin/expect
set ip [exec curl http://ipecho.net/plain]
spawn fwknop -A tcp/22 -a $ip -D foo.org -P tcp -p 9999
Eu não tenho experiência com expect , mas gostaria de saber se it entende de back-ticks. Experimente
#!/bin/sh# or specify#!/usr/bin/env bashif you believe that you need to.expect <<- !
spawn fwknop -A tcp/22 -a 'curl http://ipecho.net/plain' -D foo.org ...
expect "Enter encryption password:"
send "pass1\r"
spawn ssh -Y [email protected]
expect "[email protected]'s password:"
send "pass2\r"
!
para que você obtenha o 'curl http://ipecho.net/plain' a ser processado pelo shell.
Tags expect shell-script script