OSX bash & erwarten

Habe ich ein Skript ausführen muss ein "sudo" - operation auf jedes von einer Anzahl von hosts. Ich bin versucht zu bekommen, erwarten, zu arbeiten, so ich nur geben Sie es einmal, und haben, laufen Sie in ein paar Probleme.

Zunächst einige Beispiele empfehlen:

/usr/bin/expect <<EOD
spawn ssh -t $host /usr/bin/sudo -v
expect "Password:"
send "$SUDOPASS\n"
EOD

Jedoch, sobald ich in das zweite '<', alle zitiert wird nach oben geschraubt, und mein Skript endet mit einem unerwarteten Ende der Datei. Das ist wirklich seltsam, als ich denselben Mechanismus verwenden, mit der Katze zu schreiben, die Dateien in andere scripts.

Andere Beispiele zeigen:

/usr/bin/expect -c "
spawn ssh -t $host /usr/bin/sudo -v
expect "Password:"
send "$SUDOPASS\n"
"

Tun es auf diese Weise (und durch das hinzufügen von-d-zu erwarten), bekomme ich Fehler über keine tty-Schnittstelle und eine Wiederholung des Passworts mit ein 'n' am Ende angehängt, so dass es nicht senden eines newline (ich habe versucht, '\r' als auch), aber stattdessen scheint die Flucht des 'n'

Da die meisten der Beispiele, die ich zu finden bin sind von Linux erwarte ich (ha, ha, Wortspiel nicht beabsichtigt!) dass Sie mit einem GNU erwarten, und ich bin mit einem BSD erwarten. Ich bin mit dem Lesen der man-page, aber das Wort "spawn" erscheint so oft, es könnte noch eine Weile, bis ich zufällig die richtige Instanz.

Hier ist ein Ergebnis, das scheint zu sein, am nächsten zu arbeiten:

flamingo:~ jnojr$ Scripts/getinfo_expect.sh 
Assuming you have one 'sudo' password for all of your hosts, enter it now: 
expect version 5.45
spawn /usr/bin/ssh -t macbook /usr/bin/sudo -v
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {67358}

expect: does "" (spawn_id exp7) match glob pattern "Password:"? no
Password:
expect: does "Password:" (spawn_id exp7) match glob pattern "Password:"? yes
expect: set expect_out(0,string) "Password:"
expect: set expect_out(spawn_id) "exp7"
expect: set expect_out(buffer) "Password:"
send: sending "password\n" to { exp7 }
argv[0] = /usr/bin/expect  argv[1] = -d  argv[2] = -c  argv[3] = 
    spawn /usr/bin/ssh -t macbook /usr/bin/sudo -v
    expect Password: { send password\n }  
set argc 0
set argv0 "/usr/bin/expect"
set argv ""
sudo: no tty present and no askpass program specified[/CODE]

Dass mit dem verlassen des '\n' außerhalb der Anführungszeichen, wie in

send "$SUDOPASS"\n

Scheint es zu sein, vor allem arbeiten, außer das auslassen der '-t' option, um ssh -

  • Haben Sie als Umgehung dieser ganz zu Gunsten von ohne Passwort ssh - und/oder sudo?
InformationsquelleAutor John Oliver | 2013-02-26
Schreibe einen Kommentar