Проблема с ожидаемым скриптом - PullRequest
1 голос
/ 22 декабря 2008

Я пытаюсь создать скрипт для обновления пароля в неинтерактивный способ. Он работает на моем ноутбуке, но не работает на моем сервере. Оба работают в одной конфигурации, используя Etch.

Это скрипт:

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

На сервере вывод выглядит так:

myuser@server:~$  /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

Так что не работает, так как пара ожидает-отправить кажется не синхронизированным.

Но как ни странно, на моем ноутбуке это работает:

test@mars:/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

Есть идеи, почему на сервере происходит ошибка? Спасибо

Ответы [ 2 ]

0 голосов
/ 30 марта 2009

Это старый вопрос, но все равно ...

Попробуйте добавить «exp_internal 1» в ваш скрипт. Это даст вам более подробную информацию о том, почему ваши ожидания не совпадают.

Используйте опцию "-re" для ожидаемых команд. Вы используете '$' для привязки шаблона, но для ожидаемого соответствия по умолчанию используется -glob, где '$' не является особенным.

0 голосов
/ 22 декабря 2008

Может быть, политика паролей на сервере другая?

...