Bash / expect Skript über ssh und Port Klopfen anmelden. SSH-Schlüssel nicht möglich

Mein Anmeldeserver befindet sich hinter einer Firewall, die Port-Klopfen verwendet, um die Eingabe zuzulassen. Der Login-Flow ist

  1. Geben Sie den Befehl port knocking ein. Dazu muss meine externe IP eingegeben werden.
  2. Wenn Sie dazu aufgefordert werden, geben Sie mein Port-Knocking-Passwort ein.
  3. Geben Sie in ssh Befehl
  4. Passwort eingeben

Ich erhalte möglicherweise die Erlaubnis, ssh-Schlüssel zu verwenden, aber ich versuche, ein Skript zu schreiben, mit dem ich meine Anmeldezeiten verkürzen kann, da ich durchgehen muss dieser Fluss für jede Shell, die ich ansprechen möchte.

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

Das Ausführen jedes Befehls funktioniert über die Befehlszeile einwandfrei. Aber wenn ich versuche, den ersten Spawn-Befehl

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

Ich bekomme Fehler:

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

Aber kopieren / Einfügen des gleichen Befehls in die Befehlszeile funktioniert einwandfrei.

Author: Scott, 2013-01-22

2 answers

@Scott hat Recht, expect / Tcl macht nichts Besonderes mit Backticks, sie sind nur einfache Zeichen. Dies sollte jedoch funktionieren:

#!/bin/expect
set ip [exec curl http://ipecho.net/plain]
spawn fwknop -A tcp/22 -a $ip -D foo.org -P tcp -p 9999
 0
Author: glenn jackman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-01-23 00:12:04

Ich habe keine Erfahrung mit expect, aber ich frage mich, ob es Back-Ticks versteht.  Try

#!/bin/sh                                # oder geben Sie #!/usr/bin/env bash wenn Sie glauben, dass Sie müssen.
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"
!

Sie erhalten also das `curl http://ipecho.net/plain`, das von der Shell verarbeitet wird.

 0
Author: Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-01-22 21:21:41