2008-12-22 27 views
1

J'essaie de créer un script pour mettre à jour un mot de passe d'une manière non-interactive . Cela fonctionne sur mon ordinateur portable mais échoue sur mon serveur. Les deux exécutent la même configuration, en utilisant Etch.Problème avec un script d'attente

Voici le script:

#!/usr/bin/expect -f 
# Change user passwd 
set timeout 30 
strace 4 
set password [lindex $argv 1] 
set old_password [lindex $argv 2] 

spawn passwd [lindex $argv 0] 
sleep 1 
expect "(current) UNIX password: $" 
send "$old_password\r" 
expect "Enter new UNIX password: $" 
send "$password\r" 
expect "Retype new UNIX password: $" 
send "$password\r" 
expect eof 

Sur le serveur la sortie ressemble à ceci:

[email protected]:~$ /home/myuser/adm/chpasswd myuser NewPasswd OldPasswd 
2 lindex $argv 0 
1 set username [lindex $argv 0] 
2 lindex $argv 1 
1 set password [lindex $argv 1] 
2 lindex $argv 2 
1 set old_password [lindex $argv 2] 
1 spawn passwd $username 
spawn passwd myuser 
1 sleep 1 
1 expect "(current) UNIX password: $" 
Changing password for myuser 
(current) UNIX password: 1 send "$old_password\r" 
1 expect "Enter new UNIX password: $" 
OldPasswd 
Enter new UNIX password: 1 send "$password\r" 
1 expect "Retype new UNIX password: $" 
NewPasswd 
1 send "$password\r" 
1 expect eof 
Retype new UNIX password: 1 exit 0 

Alors ne fonctionne pas, comme le couple expect-send semble UNSYNC.

Mais étrangement, sur mon ordinateur portable, il fonctionne:

[email protected]:/home/test/adm$ ./chpasswd test NewPasswd OldPasswd 
2 lindex $argv 1 
1 set password [lindex $argv 1] 
2 lindex $argv 2 
1 set old_password [lindex $argv 2] 
2 lindex $argv 0 
1 spawn passwd [lindex $argv 0] 
spawn passwd test 
1 sleep 1 
1 expect "(current) UNIX password: $" 
Changing password for test 
(current) UNIX password: 1 send "$old_password\r" 
1 expect "Enter new UNIX password: $" 
OldPasswd 
Enter new UNIX password: 1 send "$password\r" 
1 expect "Retype new UNIX password: $" 
NewPasswd 
Retype new UNIX password: 1 send "$password\r" 
1 expect eof 
NewPasswd 
passwd: password updated successfully 
1 exit 0 

Toutes les idées pourquoi il va mal sur le serveur? Merci

Répondre

0

La stratégie de mot de passe est peut-être différente sur le serveur?

0

C'est une vieille question, mais de toute façon ...

Essayez d'ajouter "exp_internal 1" à votre script. Cela vous donnera des informations plus détaillées sur les raisons pour lesquelles vos attentes ne correspondent pas. Utilisez l'option "-re" pour vos commandes attendues. Vous utilisez '$' pour ancrer le motif, mais la correspondance par défaut pour expect est -glob où '$' n'est pas spécial.