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
- Wprowadź polecenie pukania do portu. Wymaga to podania mojego zewnętrznego adresu IP.
- Po wyświetleniu monitu wprowadź moje hasło do portu.
- Wpisz polecenie ssh
- 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.
script
shell-script
expect
Zach Melnick
źródło
źródło
-a
przełącznik (lub podasz podejrzany adres IP)?Odpowiedzi:
@Scott ma rację, spodziewaj się, że Tcl nie robi nic specjalnego z backtickami, są po prostu zwykłymi postaciami. Powinno to jednak działać:
źródło
Nie mam doświadczenia z
expect
, ale zastanawiam się, czy on rozumie back-kleszczy. Próbowaćwięc dostajesz do przetworzenia przez powłokę.
`curl http://ipecho.net/plain`
źródło