Handle login example

#! /usr/bin/expect
#
# Handle initial login options.
# 
# USAGE: $ ./handle-login <user> <password> <node>
#

set username [lindex $argv 0];
set password [lindex $argv 1];
set node [lindex $argv 2];

set timeout 5

# Start login.
spawn ssh $username@$node

# Enter password.
expect {
  # Optionally establish host authenticity.
  "Are you sure you want to continue connecting (yes/no)?" {
    send "yes\n"
    exp_continue
  }
  "password:" {
    send "$password\n"
  }
}

# Password failed, change password or logged in.
expect {
  "Permission denied" {
    send_user "Permission denied!"
    exit
  }
  "WARNING: Your password has expired." {
     # Change password.
     expect "Current Password:"
     send "$password\n"
     expect "New Password:"
     send "$password\n"
     expect "Retype new Password:"
     send "$password\n"
  }
  "Last login" {
    # Logged in.
  }
  "Creating home directory" {
    # Logged in.
  }
  timeout {
    # Do not know what prompt to expect, assume logged in.
  }
}

# Logout.
sleep 1
send "exit\n"