expect脚本

root
233
文章
0
评论
2020年2月2日23:19:16 评论 1278字阅读4分15秒

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

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年2月2日23:19:16
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
网站数据会滚脚本 shell

网站数据会滚脚本

网站数据会滚脚本 当代码经过测试环境后,正式进入生产环境,突然发现有问题,这时候需要立刻还原数据,写一个简单的网站代码回滚脚本 java项目的 #!/bin/bash Web_Dir=/server/...
三剑客练习 shell

三剑客练习

三剑客练习 grep I am hewenfu teacher! I teach linux. test I like badminton ball ,billiard ball and chines...
awk练习 shell

awk练习

awk 1.列出UID=0的用户 # awk -F : '$3==0' /etc/passwd root:x:0:0:root:/root:/bin/bash 2.列出系统的用户 # awk -F :...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: