blob: 7de78f4181e807e29e2b7373df530ad1c271a300 [file] [log] [blame]
#!/usr/bin/expect
# usage: expect_scp <remote-ip-addr>:<remote-path> <local-path>
# Sometimes, the network connection time may be more than the default
# timeout duration of expect, i.e., 10 seconds. Hence, set a longer timeout.
set timeout 20
set local_path [lindex $argv 1]
set remote_path [lindex $argv 0]
spawn scp -r -o StrictHostKeyChecking=no -o UserKnownHostsFile="/tmp/null" \
"$local_path" "$remote_path"
# The prompts from the remote machine are not deterministic.
# For example, it may prompt (yes/no) for 0, 1, or even 2 times;
# it may or may not prompt the user for a password, etc.
# We used a loop to handle various combinations of such possibilities.
expect {
# The remote machine has closed the connection.
eof {
puts "Has copied the .version file to the remote machine."
exit 0
}
# The scp connection times out.
timeout {
send_error "Error: scp timeout!";
exit 1
}
-nocase "(yes/no)?" {
send "yes\r";
exp_continue
}
-nocase "password:" {
send "test0000\r";
exp_continue
}
-nocase "Permanently added" {}
# This exception may occur when the .version file was not created for any
# reason. This causes the spawned process for scp to abort and thus
# this script was killed in a cascaded way.
-nocase "killed by signal" {
send_error "Error: the spawned scp process was killed.\n";
exit 1
}
# This exception may occur when the machine IP is incorrect.
-nocase "lost connection" {
send_error "Error: lost connection to the chromebook machine.\n";
exit 1
}
}