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

这篇具有很好参考价值的文章主要介绍了shell脚本-批量主机执行命令(expect)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

准备

上次连接多台服务器使用ssh-keygen,24机器去连接22、25,所以存在.ssh/authorized_keys

1.如果有.ssh/authorized_keys该文件则先删除

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工具

yum install expect

2.创建host.info2文件

[root@localhost scripts]# vim host.info2
192.168.70.25 root 22 123456
192.168.70.22 root 22 123456

3.创建shell脚本

[root@localhost scripts]# 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 "-----------------------------------"
done

4.执行结果

bash 9.sh df -h

[root@localhost scripts]# 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
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 475M     0  475M    0% /dev
tmpfs                    487M     0  487M    0% /dev/shm
tmpfs                    487M  7.7M  479M    2% /run
tmpfs                    487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  2.6G   15G   15% /
/dev/sda1               1014M  138M  877M   14% /boot
tmpfs                     98M     0   98M    0% /run/user/0
[root@localhost ~]#  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
[root@zabbix-agent02 ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        476M     0  476M    0% /dev
tmpfs           487M     0  487M    0% /dev/shm
tmpfs           487M  7.7M  479M    2% /run
tmpfs           487M     0  487M    0% /sys/fs/cgroup
/dev/sda2        19G  2.1G   17G   11% /
/dev/sda1      1014M  132M  883M   13% /boot
tmpfs            98M     0   98M    0% /run/user/0
[root@zabbix-agent02 ~]#  exit
登出
Connection to 192.168.70.22 closed.
df -h
 exit
-----------------------------------

bash 9.sh free -m文章来源地址https://www.toymoban.com/news/detail-547439.html

[root@localhost scripts]# 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
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         173         690           7         108         670
Swap:          2047           0        2047
[root@localhost ~]#  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
[root@zabbix-agent02 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         150         707           7         114         690
Swap:             0           0           0
[root@zabbix-agent02 ~]#  exit
登出
Connection to 192.168.70.22 closed.
free -m
 exit
-----------------------------------

到了这里,关于shell脚本-批量主机执行命令(expect)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux命令-shell】虚拟机中创建shell脚本、查看当前路径、执行脚本

    目录 一、创建shell脚本 二、查看当前的路径 三、执行脚本 一、创建shell脚本 shell脚本的特点 提前将可执行的命令语句写入一个文件中 顺序执行 解释器逐行解释代码 常见的脚本有:shell、python、PHP...... 注:用什么解释器就是什么脚本 编写shell脚本: 步骤: 1、新建文件 2、

    2024年02月05日
    浏览(46)
  • shell脚本利用telnet命令批量测试IP和端口的连通性

    IP和端用写在一个文件里面,每行一个IP+端口,中间和冒号分隔,如下的方式: 192.168.1.1:80 192.168.1.2:8080 ...... 脚本如下:

    2024年02月04日
    浏览(45)
  • shell脚本ssh远程执行命令给变量赋值的问题

    从A机器通过SSH方式到B机器,并执行相关的命令。命令中包含变量及变量的赋值。 代码如下,意思是,ssh到192.111.111.27这台机器,cd到 / 根目录下,并执行ls命令,如果ls出来的结果不为空,则执行echo命令。可以肯定的是 / 根目录下是有内容的。 可以看到当执行到 echo 命令的时

    2024年02月12日
    浏览(39)
  • linux 之 shell脚本实现SFTP下载、上传文件、执行sftp命令

    需求方通过sftp不定时的上传一批用户(SBXDS_ACC_M_任务ID_yyyymmddHHMMSS.csv),需要我们从这些用户中找出满足条件的用户。然后把这些结果用户通过文件的形式上传到ftp。 ip1能连接hive库环境,不能连接sftp。 ip2不能连接hive库环境,能连接sftp。 ip1和ip2是共享盘,能同时访问公共目录

    2024年02月19日
    浏览(53)
  • shell脚本——expect脚本免交互

    目录 一.Here Document 1.1.定义 1.2.多行重定向  二.expect实现免交互 2.1.基础免交互改密码 2.2.expect定义 2.3.expect基本命令 2.4.expect实现免交互ssh主机 1.1.定义 使用I/O重定向的方式将命令列表提供给交互式程序,是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来

    2024年02月12日
    浏览(31)
  • 在shell脚本中切换用户之后再执行多个函数以及执行多行命令的方法和遇到的问题

    其中,username是您要切换到的用户的用户名,function1和function2是您要执行的函数名称,您可以根据需要添加更多函数和命令。在EOF标记之间的所有内容都将作为切换后的用户执行。请注意,您需要确保切换后的用户具有执行所需命令和函数的权限。 其中,username为要切换到的

    2024年02月04日
    浏览(83)
  • Shell编程基础(十一)使用 expect 脚本处理人机交互

    先检测是否有安装 如果没有安装,就先安装 我们在执行某些程序时,可能会出现需要用户在过程中输入某些选项才能继续执行的场景。 比如 删除一个文件时,如果没有使用 -f 参数,系统会提示是否确认删除 又或者 ssh 远程连接服务器,也会有一些需要用户输入的东西 当我

    2024年02月13日
    浏览(39)
  • shell脚本——循环语句、sed、函数、数组、免交互expect

    目录 循环语句 for while 与 until sed 基本用法 sed脚本格式 函数 注意事项 定义函数和调用函数 脚本中函数的位置 查看函数 删除函数 函数返回值 函数的传参操作 使用函数文件 递归函数  数组 声明数组 数组切片 免交互expect 定义  基本命令 for循环需要知道循环的次数 格式1:

    2024年02月11日
    浏览(46)
  • 【Ubuntu】alias设置的别名命令在终端正常执行在shell脚本中无法直接使用(command not found)?

    ​alias设置的别名命令在终端正常执行在shell脚本中无法直接使用(command not found)? 1 背景👇🏻👇🏻👇🏻: setup_test为在/root/.bashrc中使用alias设置的别名命令。setup_test在命令行正常执行,但是执行sh脚本, 报错:setup_test:command not found 。 shell脚本内容如下:  2 分析🐰🐰🐰

    2024年02月09日
    浏览(51)
  • Shell脚本同时调用#!/bin/bash和#!/usr/bin/expect

    如果你想在一个脚本中同时使用bash和expect,你可以将expect部分嵌入到bash脚本中。以下是一个示例: 在这个示例中,我们使用了bash来设置变量和调用expect。然后,我们使用 EOF 和 EOF 来定义一个here文档,其中包含了expect的命令。这样,bash脚本就可以在执行expect命令后继续执行

    2024年01月17日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包