expect で自動ログインしパスワードを変更するスクリプト

expect で自動ログインしパスワードを変更するスクリプトのサンプル

  • 引数1: 接続先
  • 引数2: 現在のrootパスワード
  • 引数3: 新しいrootパスワード
    1. expect -c でexpect開始
    2. while で、タイムアウトを待ちながら、ssh初回接続時の yes/no 確認プロンプトを確認。パスワードを聞かれれば、パスワードを送信
    3. プロンプトが出たら、su - で特権に昇格
    4. root パスワード変更コマンド発行
    5. 新しいrootパスワードを送信後、interact で手入力を待つ
    6. successfully という文字列が出たら、成功と判断し exit

#!/bin/sh

PR='(#|\\$) $' # regular prompt

expect -c "
set timeout 10
spawn ssh sysuser@$1
while (1) {
expect timeout { break } \"(yes/no)?\" { sleep 1;send \"yes\r\" } \"word: \" { sleep 1;send \"sysuser\r\";break }
}
expect -re \"$PR\"; sleep 1; send \"su -\r\"
expect -re \":\"; sleep 1; send \"$2\r\"
expect -re \"#\"; sleep 1; send \"passwd root\r\"
expect -re \"word:\"; sleep 1; send \"$3\r\"
expect -re \"word:\"; interact -o -nobuffer successfully return
expect -re \"#\"; sleep 1; send \"exit\r\"
expect -re \":\"; sleep 1; send \"exit\r\"
"