#!/usr/bin/expect
set remoteHost [lindex $argv 0]
set remoteUser [lindex $argv 1]
set password [lindex $argv 2]
set command [lindex $argv 3]
spawn ssh ${remoteHost} -l ${remoteUser} "${command} && echo \\#success\\# || echo \\#fail\\#"
set timeout 120
expect {
"*yes/no)?"{
send "yes\n",
exp_continue
}
-nocase "*assword:"{
send ${password}
exp_continue
}
"Last login:"{}
"#fail#" {exit 1}
"*No route to host" {exit 2}
"Permission denied" {exit 3}
timeout {exit 5}
eof {exit 6}
}
第一种方式 复制文件到远程
#!/bin/bash
expect -c "
set timeout 10;
spawn scp -o StrictHostKeyChecking=no userhome/.ssh/id_rsa.pub ipaddr$userhome/.ssh/id_rsa.ipaddr;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*assword:* {send -- ${userpass}\r;expect continue;}
eof {exit 0;}
}";
第二种方式 Unix格式,切换用户执行某个脚本
#!/bin/bash
/usr/bin/expect <<-EOF
spawn ssh ip
expect "#"
send "su - user -c \"sh xxx.sh\";\r"
expect "#"
EOF
3.在循环中,执行ssh 命令的时候,发现循环中断,此时可以使用expect脚本去实现ssh功能