expect
脚本开头
expect脚本一般以#!/usr/bin/expect开头,类似bash脚本
常用后缀:
expect脚本常常以.exp或者.ex结束
expect主要命令
- spawn 新建一个进程,这个进程的交互由expect控制
- expect 等待接受进程返回的字符串,直到超出时间,根据规则进行下一步操作
- send 发送字符串给expect控制的进程
- set 设定变量的某个值
- exp_continue 重新执行expect命令
- [lindex $argv 0] 获取expect脚本的第一个参数
- [lindex $argv 1] 获取expect脚本的第二个参数
- set timeout -1 设置超时方式为永远等待
- set timeout 30 设置超时时间为30s
- interact 将脚本的控制权交给用户,用户可继续输入命令
- expect eof 等待spawn进程结束后退出信号eof
登陆一台服务器免交互脚本
[root@web01 ~]# vim expect.ex #!/usr/bin/expect spawn ssh root@192.168.5.72 expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "30772818\r" }; } interact 执行一下 [root@web01 ~]# expect expect.ex spawn ssh root@192.168.5.72 root@192.168.5.72's password: Last login: Sun Feb 2 12:06:36 2020 from 192.168.5.7 书山有路勤为径,学海无涯苦作舟 [root@zabbix ~]# exit logout Connection to 192.168.5.72 closed. [root@web01 ~]#
实现在线主机分发密钥
[root@web01 ~]# vim while.sh #!/bin/bash for i in `seq 254` do { IP=192.168.5.$i ping -c 1 -w 1 $IP &>/dev/null if [ $? -eq 0 ];then echo $IP > ip.txt echo "$IP is ok" else echo "$IP is no" fi } & done wait echo "ok." if [ ! -f ~/.ssh/id_rsa ];then ssh-keygen -P "" -f ~/.ssh/id_rsa fi while read x do /usr/bin/expect<<-xx set pass 1 set timeout 2 spawn ssh-copy-id $x -f expect { "yes/no" { send "yes\r";exp_continue } "password:" { send "30772818\r" } } expect eof xx done<ip.txt [root@web01 ~]# ssh 192.168.5.72 Last login: Mon Feb 3 11:45:27 2020 from 192.168.5.7 书山有路勤为径,学海无涯苦作舟 [root@zabbix ~]# history -c [root@zabbix ~]# exit
继续阅读

我的微信
这是我的微信扫一扫
评论