如下脚本实现了如何利用expect和spawn实现主机间相互访问并获取结果(成功返回0,失败返回1),例如:每次ssh远程登录时都需要输入密码,而通过脚本1就可以实现不用输入密码自动登陆。
1、远程Host ssh 登陆脚本(ssh)
#!/bin/bash
#./expect_ssh.sh hostIP loginName Password
./expect_ssh.sh 192.168.1.168 ubuntu 123456
#!/usr/bin/expect
#expect_ssh.sh
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $username@$host
expect {
"(yes/no)" { send "yes\r"; exp_continue }
"password:" { send "$password\r" }
}
interact
2、远程Host scp拷贝文件脚本(并返回拷贝是否成功结果)
#!/bin/bash
#./expect_scp.sh hostIP loginName Password Src_file Dest_file
./expect_scp.sh 192.168.1.168 ubuntu 123456 $src_file $dest_file
var=$?
echo $var
if [ $var -eq 0 ]; then
echo "expect_scp copy file success"
else
echo "expect_scp copy file failed"
fi
#!/usr/bin/expect
#./expect_scp.sh
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]
spawn scp $src_file $username@$host:$dest_file
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" { send "$password\n"}
}
"*assword:"
{
send "$password\n"
}
}
expect "100%"
expect eof
catch wait result
exit [lindex $result 3]