linux shell实现批量主机远程执行命令脚本

 更新时间:2024年09月13日 09:22:55   作者:小黑要上天  
这篇文章主要介绍了linux shell实现批量主机远程执行命令脚本,文章通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

基于expect命令实现

1.安装expect

[root@logstash ~]# yum install -y expect
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Package expect-5.45-14.el7_1.x86_64 already installed and latest version
Nothing to do
[root@logstash ~]# 

2.撰写脚本

expect_command.sh

#!/bin/bash
 
command=$*
host_info=/root/host.info
for ip in $(awk '/^[^#]/{print $1}' $host_info)
do
  user=$(awk -v ip=$ip 'ip==$1{print $2}' $host_info)
  port=$(awk -v ip=$ip 'ip==$1{print $3}' $host_info)
  pass=$(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 \"$pass\";exp_continue}
     \"$user@*\" {send \"$command\r exit\r\";exp_continue}
    }
  "
  echo "------Execute Successful!------"
done

linux exp_continue是一个在 Linux 系统中经常用到的命令。在 Linux 系统中,exp_continue 命令用来控制 expect 脚本的循环执行,以及在不同条件下执行不同的操作。通过使用 exp_continue 命令,用户可以让 expect 脚本在满足特定条件时继续执行下一个步骤,而不是中断脚本的执行。

exp_continue 命令的用法非常简单,只需在 expect 脚本中使用该命令即可。例如,当用户在 expect 脚本中需要等待用户输入密码时,可以使用 exp_continue 命令让脚本继续执行下一个步骤,而不是等待超时或中断脚本。这种方式可以提高脚本的效率和可靠性。

另外,exp_continue 命令还可以用来处理不同情况下的逻辑分支。例如,当用户在 expect 脚本中需要对不同的返回结果做出不同的处理时,可以使用 exp_continue 命令实现逻辑的分支跳转。这种方式可以让 expect 脚本更加灵活和智能。

[root@logstash ~]# chmod +x expect_command.sh 
[root@logstash ~]# ls -l expect_command.sh 
-rwxr-xr-x 1 root root 535 Jul 18 10:20 expect_command.sh
[root@logstash ~]# 

host.info

#格式:ip地址 用户名 端口号 密码
192.168.10.245 root 22 root

3.验证

sh expect_command.sh df -h

[root@logstash ~]# sh expect_command.sh df -h
spawn ssh -p 22 root@192.168.10.245
Last login: Thu Jul 18 11:34:50 2024 from 192.168.10.131
[root@kibana ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G     0  2.0G   0% /dev/shm
tmpfs                    2.0G   13M  2.0G   1% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/centos-root   38G  7.7G   30G  21% /
/dev/sr0                 4.4G  4.4G     0 100% /mnt
/dev/sda1               1014M  172M  843M  17% /boot
/dev/mapper/centos-home   19G   37M   19G   1% /home
tmpfs                    394M   12K  394M   1% /run/user/42
tmpfs                    394M     0  394M   0% /run/user/0
[root@kibana ~]#  exit
logout
Connection to 192.168.10.245 closed.
df -h
 exit
------Execute Successful!------
[root@logstash ~]# 

sh expect_command.sh vmstat

[root@logstash ~]# sh expect_command.sh vmstat
spawn ssh -p 22 root@192.168.10.245
Last login: Thu Jul 18 11:36:21 2024 from 192.168.10.131
[root@kibana ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 2939704   1096 471976    0    0   391     8  170  358  0  1 99  0  0
[root@kibana ~]#  exit
logout
Connection to 192.168.10.245 closed.
vmstat
 exit
------Execute Successful!------
[root@logstash ~]# 

以上就是linux shell实现批量主机远程执行命令脚本的详细内容,更多关于linux shell主机远程执行命令的资料请关注脚本之家其它相关文章!

相关文章

  • Shell $0, $#, $*, $@, $?, $$和命令行参数的使用

    Shell $0, $#, $*, $@, $?, $$和命令行参数的使用

    这篇文章主要介绍了Shell $0, $#, $*, $@, $?, $$和命令行参数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • shell中的排序算法示例代码

    shell中的排序算法示例代码

    本文主要介绍了shell中的排序算法示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 在 Bash 中循环遍历文件内容的不同方法

    在 Bash 中循环遍历文件内容的不同方法

    本文介绍了在Bash脚本中遍历文件内容的几种方法,包括使用while循环和read命令逐行读取文件,使用for循环和cat命令读取整个文件内容,使用IFS变量进行单词循环,以及使用awk命令进行更高级的文本处理,每种方法都有其适用的场景和优缺点,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • 开发者常用及实用Linux Shell命令备忘录(小结)

    开发者常用及实用Linux Shell命令备忘录(小结)

    这篇文章主要介绍了开发者常用及实用Linux Shell命令备忘录(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • shell中的for循环用法详解

    shell中的for循环用法详解

    这篇文章主要介绍了shell中的for循环用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • shell脚本加密工具shc使用详解

    shell脚本加密工具shc使用详解

    Linux下的shell脚本用途广泛,经常包含IP、Pwd等关键信息,可读可写的特点很容易造成信息泄露,导致严重后果。基于这些原因,对脚本实施加密便变得很有必要。本文介绍shell脚本加密工具应用场景分析,一起看看吧
    2021-06-06
  • linux shell内置判断语句

    linux shell内置判断语句

    内置判断,成功的时候返回0,不成功返回非零。接下来通过本文重点给大家介绍linux shell内置判断语句,感兴趣的的朋友一起看看吧
    2017-08-08
  • 程序中获取linux系统启动时间方法

    程序中获取linux系统启动时间方法

    需要在应用程序获取系统的启动时间,通过sysinfo中的uptime可以计算出系统的启动时间,下面介绍一下获取方法,大家参考使用吧
    2014-01-01
  • LINUX 生产环境搭建推荐教程

    LINUX 生产环境搭建推荐教程

    由于linux生产环境搭建步骤非常多,很繁琐而且又是必不可少的步骤。虽然已经做过很多次,但是由于步骤繁琐,很容易忘记,下面小编抽个时间把linux生产环境搭建步骤记录下来,分享在脚本之家平台,以便需要之时使用
    2015-10-10
  • bash判断文件或文件夹是否存在的shell代码

    bash判断文件或文件夹是否存在的shell代码

    这篇文章主要介绍了bash判断文件或文件夹是否存在的shell代码,需要的朋友可以参考下
    2017-05-05

最新评论