title: How do I use expect to connect via ssh to a system and change the password of the host system?
body: <p>I am automating the process of:<br>
  Connect to a system named "alpha" via ssh with password "alpha" for username "alpha". Once connected I would like to set the root password (to "kickass"). The system I am connecting to doesn't have a root password by default. I wrote this expect script to do the job but it doesn't work consistently. It works once and then if I change the password to test again, it waits at the "Enter new UNIX password:" prompt after issuing "sudo passwd root". Any ideas?</p>
  
  <pre><code>#!/usr/bin/expect -f
  set arg1 [lindex $argv 0]
  set force_conservative 1  ;# set to 1 to force conservative mode even if
                ;# script wasn't run conservatively originally
  if {$force_conservative} {
      set send_slow {1 .1}
      proc send {ignore arg} {
          sleep .1
          exp_send -s -- $arg
      }
  }
  
  set timeout -1
  spawn ssh alpha@$arg1
  match_max 100000
  expect -exact "password: "
  send -- "alpha\r"
  expect -exact "alpha@alpha:~\$ "
  send -- "sudo passwd root\r"
  expect -exact "password for alpha: "
  send -- "alpha\r"
  expect -exact "new UNIX password: "
  send -- "kickass\r"
  expect -exact "Retype new UNIX password: "
  send -- "kickass\r"
  expect -exact "alpha@alpha:~\$ "
  send -- "exit\r"
  expect eof
  </code></pre>
  
  <p>Thanks.</p>