Clean#
#! /usr/bin/env expect
set host [lindex $argv 0];
set user [lindex $argv 1];
set passwd [lindex $argv 2];
set timeout 5
spawn ssh $user@$host
expect {
  "yes/no" {
    send "yes\r"
    exp_continue
  }
  "password:" {
    send "$passwd\r"
    exp_continue
  }
  "$user@$host:~? " {
    exit 0
  }
  timeout {
    exit 2
  }
}
exit 1
Wrapped inside bash#
#! /usr/bin/env bash
assert_ssh_login() {
  local host="${1}"
  local user="${2}"
  local passwd="${3}"
  local details="$(echo -e "\
    set timeout 5              \n\
    spawn ssh ${user}@${host}  \n\
    expect {                   \n\
      \"yes/no\" {             \n\
        send \"yes\r\"         \n\
        exp_continue           \n\
      }                        \n\
                              \n\
      \"password:\" {          \n\
        send \"${passwd}\r\"   \n\
        exp_continue           \n\
      }                        \n\
                              \n\
      \"${user}@${host}:~? \" {\n\
        exit 0                 \n\
      }                        \n\
                              \n\
      timeout {                \n\
        exit 2                 \n\
      }                        \n\
    }                          \n\
                              \n\
    exit 1                     \n\
    " | expect)"
  case "${?}" in
    "0") echo "Can login as ${user} on ${host}" ;;
    "1") echo "${user} can not login on ${host}. Details: ${details}" ;;
    "2") echo "${user} can not login on ${host} (Timeout). Details: ${details}" ;;
    * ) echo "${user} can not login on ${host} (Error ${?}): Details: ${details}" ;;
  esac
}