首页 > 系统相关 >linux shell批量主机远程执行命令脚本

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

时间:2024-09-18 15:23:06浏览次数:3  
标签:执行命令 shell continue ip sh command expect linux root


基于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 [email protected]
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 [email protected]
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 ~]#

标签:执行命令,shell,continue,ip,sh,command,expect,linux,root
From: https://blog.51cto.com/ztj1216/12046508

相关文章

  • linux shell批量创建用户并设置密码脚本
    useradd.sh#!/bin/bashuser_file=/root/user.txtforuserin$(cat$user_file)doif!id$user&>/dev/null;thenpass=$(echo$RANDOM|md5sum|cut-c1-8)useradd$userecho$pass|passwd--stdin$user&>/dev/nullecho"$u......
  • 【Linux实用教程】-02- Linux常用命令
    ===点个关注不迷路===......
  • 远程Linux服务器安装jdk1.8(亲测)
    上传jdk压缩包到服务器将压缩包进行解压,使用tar-zvxf压缩包名命令进行解压配置环境变量    编辑/etc/profile文件,在文件末尾添加以下内容:        exportJAVA_HOME=/usr/local/src/jdk1.8        exportPATH=$PATH:$JAVA_HOME/bin  ......
  • 【转载】在Linux中创建新用户的三种方法,总有一种适合你 对应需求:linux新建密码
    需求:新建密码的账号实现:useradd新建账号(不含密码)passwd修改密码-------------------------------------———————————————————————————————————————————————————————————————————————————————......
  • linux 操作系统下的 depmod 命令介绍和使用案例
    linux操作系统下的depmod命令介绍和使用案例depmod命令在Linux操作系统中用于生成内核模块的依赖关系和相关的映射文件。它分析内核模块并创建一个依赖列表,以确保在使用modprobe加载和卸载模块时,所有必需的模块都能得到正确处理。depmod命令介绍功能生成依赖列表:depmod......
  • linux上批量将pdf转为png文件
    点击查看代码importfitz#pipinstallpymupdf-ihttps://pypi.tuna.tsinghua.edu.cn/simple/importosdefpdf2img(pdf_path,zoom_x,zoom_y):"""参数说明:parampdf_path:pdf文件的路径:paramzoom_x:x轴方向的缩放系数:paramzoom_y:y轴......
  • Linux修改进入终端的默认地址
    1:进入到要修改的用户目录下,我要修改root的,我进入到root目录下cdroot/进入目录后,发现目录下只有anaconda-ks.cfg配置文件,没有.bashrc文件,因为这个文件是隐藏的 2:我们执行编辑文件命令vim.bashrc  3:在文件中添加cd命令:例如,添加以下行以设置默认路径:cd/you......
  • 制作基于debian的linux live启动u盘(UEFI)
    参考从零开始制作一个linuxiso镜像_详解:把Linux系统做成Livecd从零制作Ubuntu20.04LiveCDLiveCDCustomization(ubuntu官方文档)从零开始制作Ubuntu22.04LiveCDCreateaCustomDebianLiveEnvironment(CDorUSB)方法一:live-build这是debian官方的live镜......
  • 项目发布后项目时间和linux时间不一致
     查阅了很多资料,本来总以为是项目的问题,启动前端,连接不同的后台,本地项目时间是正确的,部署到linuxDocker容器就不行。很纳闷......基于以上,还是决定记下来,以便后来的人查阅,解决问题。    Docker部署后,进入容器,这里假设docker容器Id为  123456.    ......
  • 240908-Linux通过ln设置软链接关联大模型文件
    在Linux中,您可以使用ln命令来创建软链接(符号链接)。软链接是一种特殊类型的文件,它指向另一个文件或目录。以下是如何设置软链接的步骤:创建软链接基本语法:ln-s[目标文件或目录][软链接的名称]示例:创建文件的软链接:假设您有一个名为/home/user/original_file.txt的文件,您想在/home/......