1

非対話的な方法でパスワードを更新するスクリプトを作成しようとしています。ラップトップでは動作していますが、サーバーでは失敗します。どちらも 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

カップルのexpect-sendが同期していないように見えるため、機能していません。

しかし、奇妙なことに、私のラップトップでは動作します:

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

サーバーで問題が発生する理由はありますか? ありがとう

4

2 に答える 2

0

これは古い質問ですが、とにかく...

スクリプトに「exp_internal1」を追加してみてください。それはあなたの期待が一致しない理由についてあなたにもっと詳細な情報を与えるでしょう。

期待するコマンドには「-re」オプションを使用します。パターンを固定するために「$」を使用していますが、expectのデフォルトの一致は-globであり、「$」は特別ではありません。

于 2009-03-30T13:22:22.090 に答える
0

サーバーのパスワード ポリシーが異なる可能性がありますか?

于 2008-12-22T11:08:16.913 に答える