Comment faire pour envoyer un mot de passe avec un symbole $ dans le Script expect

J'ai un script expect que j'ai besoin de vous connecter à un système distant et exécuter des commandes. Ce script fonctionne à l'exception de fournir le mot de passe pour le compte root. Le mot de passe root contient un signe dollar que je n'arrive pas à se mettre au travail. Voici le 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 $username@$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" }

J'ai vérifié ces travaux lors de la fourniture d'informations d'identification dont les mots de passe qui ne contiennent pas le signe de dollar, mais je ne peux pas le faire fonctionner avec le compte root. Il produit toujours le Login failed. Password incorrect erreur de dépassement de délai. Changer le mot de passe n'est pas une option. J'ai essayé de fournir le \ caractère d'échappement dans le mot de passe définition comme suit:

set password "Pas$word"

Et j'obtiens les mêmes résultats... toutes les idées sur ce que je fais mal?

Grâce

MODIFIER
Comme je l'ai dit. J'ai déjà essayé d'échapper le caractère$. Mais pour préciser, j'ai ajouté une impression de résultat pour le mot de passe lorsque le script de démarrage pour vérifier que la variable contient le mot de passe correctement... Ici, c'est le changement:

set password "Pas$word"
...
send_user "\n#####\n# $hostname\n#####\n"
send_user "Using password: $password\n"
...

Ici est la sortie de la console:

njozwiak@ubuntu:~$ ./ssh_ls.sh 192.168.5.93

#####
# 192.168.5.93
#####
Using password: Pas$word

Login failed. Password incorrect.
  • Se débarrasser des citations où que vous soyez à l'aide de jeu. La caisse de ma réponse.
  • Je pense que set password {Pas$word} devrait être suffisant. Exécuter le script avec expect -d ssh-ls.sh pour voir ce qui se passe en arrière-plan.
InformationsquelleAutor linsek | 2013-07-29