Ich habe ein Expect-Skript, das ich auf einem Remote-System anmelden und Befehle ausführen muss. Dieses Skript funktioniert mit der Ausnahme, dass das Kennwort für das root-Konto angegeben wird. Das root-Passwort enthält ein Dollarzeichen, das ich nicht zur Arbeit bringen kann. Hier ist der Code
#!/usr/bin/expect
set timeout 3
set username "root"
set password "Pas$word"
set hostname [lindex $argv 0]
log_user 0
send_user "\n#####\n# $hostname\n#####\n"
spawn ssh -q -o StrictHostKeyChecking=no [email protected]$hostname
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $hostname\n"; exit 1 }
"*assword"
}
send "$password\r"
expect {
timeout { send_user "\nLogin failed. Password incorrect.\n"; exit 1}
"*\$ "
}
send_user "\nPassword is correct\n"
expect "$ " { send "ls" }
ich überprüft haben, das funktioniert, wenn Anmeldeinformationen, deren Kennwörter Bereitstellung nicht das Dollarzeichen enthält, aber ich kann es nicht mit dem Root-Account zu arbeiten. Es erzeugt immer den Timeout-Fehler Login failed. Password incorrect
. Das Ändern des Passworts ist keine Option. Ich habe versucht, wie so die \
Escape-Zeichen in der Passwort-Definition zu liefern:
set password "Pas\$word"
Und ich bekomme die gleichen Ergebnisse ... irgendwelche Ideen, was ich falsch mache?
Dank
EDIT Wie ich schon sagte. Ich habe schon versucht, dem $ -Zeichen zu entkommen. Aber zu klären, habe ich eine print-Anweisung für das Passwort, wenn das Skript die Variable das Passwort enthält korrekt zu verifizieren anläuft ... Hier ist die Änderung:
set password "Pas\$word"
...
send_user "\n#####\n# $hostname\n#####\n"
send_user "Using password: $password\n"
...
Hier wird die Konsolenausgabe:
n[email protected]:~$ ./ssh_ls.sh 192.168.5.93
#####
# 192.168.5.93
#####
Using password: Pas$word
Login failed. Password incorrect.
Sie sich von den Zitaten befreien, wo immer Sie Satz verwenden. Kasse meine Antwort. –
Ich würde denken, 'set password {Pas $ word}' sollte ausreichen. Führen Sie Ihr Skript mit 'expect -d ssh-ls.sh' aus, um zu sehen, was im Hintergrund passiert. –