Skrypt Bash / expect zaloguje się przez ssh i port knocking. Klucze SSH nie są możliwe

2

Mój serwer logowania znajduje się za zaporą ogniową, która wykorzystuje przełączanie portów, aby umożliwić wejście. Przepływ logowania jest

  1. Wprowadź polecenie pukania do portu. Wymaga to podania mojego zewnętrznego adresu IP.
  2. Po wyświetleniu monitu wprowadź moje hasło do portu.
  3. Wpisz polecenie ssh
  4. Wpisz hasło

Mogę uzyskać pozwolenie na używanie kluczy ssh, ale próbuję napisać skrypt, który pozwoli mi skrócić czas logowania, ponieważ muszę przejść przez ten przepływ dla każdej powłoki, którą chcę wywołać.

#!/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"

Uruchomienie każdego polecenia działa poprawnie z wiersza poleceń. Ale kiedy próbuję uruchomić pierwsze polecenie spawn

spawn fwknop -A tcp/22 -a `curl http://ipecho.net/plain` -D foo.org -P tcp -p 9999

Dostaję błąd:

fwknop: fko_set_spa_message: Error 10 - Invalid allow IP address in the SPA message data
send: spawn id exp7 not open

Ale skopiuj / wklej to samo polecenie do wiersza polecenia działa doskonale.

Zach Melnick
źródło
Czy błąd jest taki sam jak w wierszu poleceń, jeśli pominiesz -aprzełącznik (lub podasz podejrzany adres IP)?
Paul

Odpowiedzi:

0

@Scott ma rację, spodziewaj się, że Tcl nie robi nic specjalnego z backtickami, są po prostu zwykłymi postaciami. Powinno to jednak działać:

#!/bin/expect
set ip [exec curl http://ipecho.net/plain]
spawn fwknop -A tcp/22 -a $ip -D foo.org -P tcp -p 9999
Glenn Jackman
źródło
0

Nie mam doświadczenia z expect, ale zastanawiam się, czy on rozumie back-kleszczy. Próbować

#!/bin/sh                                # lub określ, #!/usr/bin/env bashczy uważasz, że musisz.
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"
!

więc dostajesz do przetworzenia przez powłokę.`curl http://ipecho.net/plain`

Scott
źródło