Script Bash / expect para efetuar login via ssh e port knocking. Chaves SSH não são possíveis

2

Meu servidor de login está protegido por um firewall que usa a porta para permitir a entrada. O fluxo de login é

  1. Digite no comando de porta batendo. Isso requer que meu IP externo seja inserido.
  2. Quando solicitado, insira minha senha de bloqueio de porta.
  3. Insira no comando ssh
  4. Insira a senha

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.

    
por Zach Melnick 22.01.2013 / 20:58

2 respostas

0

@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
    
por 23.01.2013 / 00:12
0

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 bash if 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.

    
por 22.01.2013 / 21:21