翼度科技»论坛 云主机 LINUX 查看内容

shell脚本-批量主机执行命令(expect)

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
shell脚本-批量主机执行命令(expect)

准备

上次连接多台服务器使用ssh-keygen,24机器去连接22、25,所以存在.ssh/authorized_keys
1.如果有.ssh/authorized_keys该文件则先删除
  1. rm -rf.ssh/authorized_keys
复制代码
expect介绍

1.expect命令含义
expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。
2.expect使用场景
(1)并根据预定标准回答其问题,回答“是”、“否”或将控制权交还给您
(2)远程连接设备并执行自动化操作
(3)主要是一些需要人机交互的地方,如果提前知道应该输入什么指令都可以使用expect 工具
3.expect命令
命令   作用
send   用于向进程发送字符串
expect   从进程接收字符串
spawn   启动新的进程
interact   允许用户交互
exp_continue  处理匹配成功后,继续执行下一个匹配
命令中\r表示换行
实验步骤

1.安装expect工具
  1. yum install expect
复制代码
2.创建host.info2文件
  1. [root@localhost scripts]# vim host.info2
  2. 192.168.70.25 root 22 123456
  3. 192.168.70.22 root 22 123456
复制代码
3.创建shell脚本
  1. [root@localhost scripts]# vim 9.sh
  2. #!/bin/bash
  3. COMMAND=$*
  4. HOST_INFO=host.info2
  5. IP_LIST=`awk '/^[^#]/{print $1}' $HOST_INFO`
  6. for IP in $IP_LIST;do
  7.         USER=`awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO`
  8.         PORT=`awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO`
  9.         PASSWD=`awk -v ip=$IP 'ip==$1{print $4}' $HOST_INFO`
  10.         expect -c "
  11.                 spawn ssh -p $PORT $USER@$IP
  12.                 expect {
  13.                         "(yes/no)" {send "yes\r"; exp_continue }
  14.                         "password:" {send "$PASSWD\r"; exp_continue}
  15.                         "$USER@*" {send "$COMMAND\r exit\r"; exp_continue}  
  16.                 }
  17.         "
  18.         echo "-----------------------------------"
  19. done
复制代码
4.执行结果
bash 9.sh df -h
  1. [root@localhost scripts]# bash 9.sh df -h
  2. spawn ssh -p 22 root@192.168.70.25
  3. root@192.168.70.25's password:
  4. Last login: Wed Jul 12 01:30:48 2023 from 192.168.70.24
  5. [root@localhost ~]# df -h
  6. 文件系统                 容量  已用  可用 已用% 挂载点
  7. devtmpfs                 475M     0  475M    0% /dev
  8. tmpfs                    487M     0  487M    0% /dev/shm
  9. tmpfs                    487M  7.7M  479M    2% /run
  10. tmpfs                    487M     0  487M    0% /sys/fs/cgroup
  11. /dev/mapper/centos-root   17G  2.6G   15G   15% /
  12. /dev/sda1               1014M  138M  877M   14% /boot
  13. tmpfs                     98M     0   98M    0% /run/user/0
  14. [root@localhost ~]#  exit
  15. 登出
  16. Connection to 192.168.70.25 closed.
  17. df -h
  18. exit
  19. -----------------------------------
  20. spawn ssh -p 22 root@192.168.70.22
  21. root@192.168.70.22's password:
  22. Last login: Wed Jul 12 01:30:49 2023 from 192.168.70.24
  23. [root@zabbix-agent02 ~]# df -h
  24. 文件系统        容量  已用  可用 已用% 挂载点
  25. devtmpfs        476M     0  476M    0% /dev
  26. tmpfs           487M     0  487M    0% /dev/shm
  27. tmpfs           487M  7.7M  479M    2% /run
  28. tmpfs           487M     0  487M    0% /sys/fs/cgroup
  29. /dev/sda2        19G  2.1G   17G   11% /
  30. /dev/sda1      1014M  132M  883M   13% /boot
  31. tmpfs            98M     0   98M    0% /run/user/0
  32. [root@zabbix-agent02 ~]#  exit
  33. 登出
  34. Connection to 192.168.70.22 closed.
  35. df -h
  36. exit
  37. -----------------------------------
复制代码
bash 9.sh free -m
  1. [root@localhost scripts]# bash 9.sh free -m
  2. spawn ssh -p 22 root@192.168.70.25
  3. root@192.168.70.25's password:
  4. Last login: Wed Jul 12 01:31:24 2023 from 192.168.70.24
  5. [root@localhost ~]# free -m
  6.               total        used        free      shared  buff/cache   available
  7. Mem:            972         173         690           7         108         670
  8. Swap:          2047           0        2047
  9. [root@localhost ~]#  exit
  10. 登出
  11. Connection to 192.168.70.25 closed.
  12. free -m
  13. exit
  14. -----------------------------------
  15. spawn ssh -p 22 root@192.168.70.22
  16. root@192.168.70.22's password:
  17. Last login: Wed Jul 12 01:31:24 2023 from 192.168.70.24
  18. [root@zabbix-agent02 ~]# free -m
  19.               total        used        free      shared  buff/cache   available
  20. Mem:            972         150         707           7         114         690
  21. Swap:             0           0           0
  22. [root@zabbix-agent02 ~]#  exit
  23. 登出
  24. Connection to 192.168.70.22 closed.
  25. free -m
  26. exit
  27. -----------------------------------
复制代码

来源:https://www.cnblogs.com/xuxuxuxuxu/p/17546412.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具