1:expect 自动应答 tcl 语言 实现远程登录到其他主机进行操作
2:检测是否安装expect程序
检测是否安装命令:yum list|grep expect 安装成功 有如下图箭头所示表示已安装
安装命令:yum -y install expect
3:expect 语法如下:
#!/usr/bin/expect
# 使用set来定义变量 使用$ip来获取变量
set ip 192.168.195.11
# 使用spawn 单词开启一个程序
spawn ssh root@$ip
# 使用expect 单词来捕获相关内容
expect {
"(yes/no)?" { send "yes\r";exp_continue }
"login:" { send "root\r" }
"password:" { send "root\r" }
}
# 使用expect 来捕获当前输入行的内容 #:表示 可以执行用户的命令
expect "#"
# 使用send 来发送命令 必须使用\r 结束命令
send "mkdir -p /home/test\r"
send "touch /home/test/file{1..3}\r"
# 必须使用exit 退出挡墙
send "exit\r"
# interact 会停留在目标用户 即停留在操作主机界面中的 目标用户的操作 程序不会退出
# 一般和expect eof 中选择一个 一般会选择 执行完毕后 通过expect eof 进行程序退出
# interact
# 必须写expect eof 来程序执行完毕退出
expect eof
4:在执行expect 脚本
授予权限:chmod +x yyy/xxx.sh
执行权限:/yyy/xxx.sh
5:执行上面的脚本
创建 vi /home/shell/test06.sh
复制上面代码到test06.sh中
执行: chmod +x /home/shell/test06.sh
执行:/home/shell/test06.sh
结果如下:创建3个文件
6:expect 脚本定义位置参数
#!/usr/bin/env expect
# 通过脚本带参数来取值 第一个参数
set ip [ Lindex $argv 0]
# 通过脚本带参数来取值 第二个参数
set password [ Lindex $argv 1]
# 定义设置超时的时间
set timeout 5
# 开启一个程序
spawn ssh root@$ip
# 捕获
expect {
"(yes/no)?" { send "yes\r";exp_continue }
"password:" {send "$password\r" }
}
expect eof