--- /dev/null
+#!/usr/bin/expect --
+
+proc usage {} {
+ puts stderr "Usage: sshauser \[ --retry \] port user \[ command ... \]"
+ exit 22
+}
+
+if { $argc < 2 } {
+ usage
+}
+
+set arg 0
+set retry 0
+if { [lindex $argv $arg] == "--retry" } {
+ set retry 1
+ set arg [expr $arg + 1]
+}
+set offset [lindex $argv $arg]
+set arg [expr $arg + 1]
+set username [lindex $argv $arg]
+set arg [expr $arg + 1]
+set command [lrange $argv $arg $argc]
+
+set password "alpine"
+set timeout 60
+
+# trap SIGWINCH and pass to spawned process
+trap {
+ set rows [stty rows]
+ set cols [stty columns]
+ stty rows $rows columns $cols < $spawn_out(slave,name)
+} WINCH
+
+set continue 1
+while { $continue } {
+ set continue $retry
+ spawn ssh -o NoHostAuthenticationForLocalhost=yes -p $offset $username@localhost
+ while { 1 } {
+ expect "Are you sure you want to continue connecting (yes/no)" {
+ send "yes\r"
+ } "password:" {
+ send "$password\r"
+ } "#" {
+ if { $argc > 2 } { send "$command\r" }
+ interact
+ break
+ } "mobile" {
+ if { $argc > 2 } { send "$command\r" }
+ interact
+ break
+ } "ssh: connect to host localhost port $offset: Connection refused" {
+ if { $retry } {
+ wait
+ set continue $retry
+ send_user "conection lost... retrying in 5 seconds.\n"
+ sleep 5
+ }
+ break
+ } "ssh_exchange_identification: read: Connection reset by peer" {
+ if { $retry } {
+ wait
+ set continue $retry
+ send_user "Device rebooting waiting for 15 seconds.\n"
+ sleep 15
+ }
+ break
+ }
+ }
+}