好风凭借力 发表于 2023-7-12 06:34:50

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

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

准备

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

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

1.安装expect工具
yum install expect2.创建host.info2文件
# vim host.info2
192.168.70.25 root 22 123456
192.168.70.22 root 22 1234563.创建shell脚本
# vim 9.sh
#!/bin/bash
COMMAND=$*
HOST_INFO=host.info2
IP_LIST=`awk '/^[^#]/{print $1}' $HOST_INFO`
for IP in $IP_LIST;do
      USER=`awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO`
      PORT=`awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO`
      PASSWD=`awk -v ip=$IP 'ip==$1{print $4}' $HOST_INFO`
      expect -c "
                spawn ssh -p $PORT $USER@$IP
                expect {
                        \"(yes/no)\" {send \"yes\r\"; exp_continue }
                        \"password:\" {send \"$PASSWD\r\"; exp_continue}
                        \"$USER@*\" {send \"$COMMAND\r exit\r\"; exp_continue}
                }
      "
      echo "-----------------------------------"
done4.执行结果
bash 9.sh df -h
# bash 9.sh df -h
spawn ssh -p 22 root@192.168.70.25
root@192.168.70.25's password:
Last login: Wed Jul 12 01:30:48 2023 from 192.168.70.24
# df -h
文件系统               容量已用可用 已用% 挂载点
devtmpfs               475M   0475M    0% /dev
tmpfs                  487M   0487M    0% /dev/shm
tmpfs                  487M7.7M479M    2% /run
tmpfs                  487M   0487M    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G2.6G   15G   15% /
/dev/sda1               1014M138M877M   14% /boot
tmpfs                     98M   0   98M    0% /run/user/0
#exit
登出
Connection to 192.168.70.25 closed.
df -h
exit
-----------------------------------
spawn ssh -p 22 root@192.168.70.22
root@192.168.70.22's password:
Last login: Wed Jul 12 01:30:49 2023 from 192.168.70.24
# df -h
文件系统      容量已用可用 已用% 挂载点
devtmpfs      476M   0476M    0% /dev
tmpfs         487M   0487M    0% /dev/shm
tmpfs         487M7.7M479M    2% /run
tmpfs         487M   0487M    0% /sys/fs/cgroup
/dev/sda2      19G2.1G   17G   11% /
/dev/sda1      1014M132M883M   13% /boot
tmpfs            98M   0   98M    0% /run/user/0
#exit
登出
Connection to 192.168.70.22 closed.
df -h
exit
-----------------------------------bash 9.sh free -m
# bash 9.sh free -m
spawn ssh -p 22 root@192.168.70.25
root@192.168.70.25's password:
Last login: Wed Jul 12 01:31:24 2023 from 192.168.70.24
# free -m
            total      used      free      sharedbuff/cache   available
Mem:            972         173         690         7         108         670
Swap:          2047         0      2047
#exit
登出
Connection to 192.168.70.25 closed.
free -m
exit
-----------------------------------
spawn ssh -p 22 root@192.168.70.22
root@192.168.70.22's password:
Last login: Wed Jul 12 01:31:24 2023 from 192.168.70.24
# free -m
            total      used      free      sharedbuff/cache   available
Mem:            972         150         707         7         114         690
Swap:             0         0         0
#exit
登出
Connection to 192.168.70.22 closed.
free -m
exit
-----------------------------------
来源:https://www.cnblogs.com/xuxuxuxuxu/p/17546412.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: shell脚本-批量主机执行命令(expect)