#!/usr/bin/expect --

# ssh using the parms provided by the caller.  The benefit provided by this
# program is that it will enter the password for you (i.e. non-interactively).

# Description of arguments:
# Arg0: The password.
# Arg1: The ssh parm string.  This is the totality of ssh parms you wish to
#       specify (e.g. userid, host, etc.).


###############################################################################
# Main

  # Get arguments.
  set password [lindex $argv 0]
  set ssh_parms [lreplace $argv 0 0]

  eval spawn ssh ${ssh_parms}

  set timeout 30

  set max_attempts 3

  set attempts 0
  while { 1 } {
    incr attempts 1
    expect {
      -re "Offending RSA key in (.*?)\[\r\n\]" {
        # We have been informed by ssh that we have a bad key.
        # Retrieve the file path and line number from the ssh output.
        set fields [split $expect_out(1,string) ":"]
        set file_path [lindex $fields 0]
        set line_num [lindex $fields 1]
        # Use sed to delete the bad key.
        set cmd_buf "sed -i ${line_num}d ${file_path}"
        puts "Issuing: ${cmd_buf}"
        eval exec bash -c {$cmd_buf}
        # Kill the failed spawned ssh process.
        exec kill -9 [exp_pid]
        # Start a new process now that our stale key problem is fixed.
        eval spawn ssh ${ssh_parms}
        continue
      }
      -re "assword:" {
        send "$password\r"
        break
      }
      -re "Are you sure you want to continue connecting" {
        if { $attempts > $max_attempts } {
          puts stderr "**ERROR** Exceeded $max_attempts attempts to ssh."
          exit 1
        }
        send "yes\r"
      }
      timeout {
        puts stderr "**ERROR** Timed out waiting for password prompt."
        exit 1
      }
      eof {
        puts stderr "**ERROR** End of data waiting for password prompt."
        exit 1
      }
    }
  }

  set timeout 3
  expect {
    "Permission denied, please try again." {
      puts ""
      puts "**ERROR** Incorrect userid or password provided to this program."
      exit 1
    }
  }

  set timeout -1

  # We don't ever expect to see this string.  This will keep this program
  # running indefinitely.
  set never_string "When in the course of human events, it becomes :"
  if { [ catch {expect { "${never_string}" {send "whatever\r"} }} result ] } {
    set child_died {expect:[ ]spawn[ ]id[ ]exp4[ ]not[ ]open}
    if { [regexp -expanded ${child_died} $result] } {
      # The child died.  This is not necessarily an error (for example, the
      # user may have included a command string to run on the target).
      exit 0
    } else {
      puts $result
      exit 1
    }
  }

  exit 0

###############################################################################

