linux shell实现批量主机远程执行命令脚本
基于expect命令实现
[root@logstash ~]# yum install -y expectLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.comPackage expect-5.45-14.el7_1.x86_64 already installed and latest versionNothing to do[root@logstash ~]#
expect_command.sh
#!/bin/bash command=$*host_info=/root/host.infofor 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
sh expect_command.sh df -h
[root@logstash ~]# sh expect_command.sh df -hspawn ssh -p 22 root@192.168.10.245Last login: Thu Jul 18 11:34:50 2024 from 192.168.10.131[root@kibana ~]# df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 2.0G 0 2.0G 0% /devtmpfs 2.0G 0 2.0G 0% /dev/shmtmpfs 2.0G 13M 2.0G 1% /runtmpfs 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% /hometmpfs 394M 12K 394M 1% /run/user/42tmpfs 394M 0 394M 0% /run/user/0[root@kibana ~]# exitlogoutConnection to 192.168.10.245 closed.df -h exit------Execute Successful!------[root@logstash ~]#
sh expect_command.sh vmstat
[root@logstash ~]# sh expect_command.sh vmstatspawn ssh -p 22 root@192.168.10.245Last login: Thu Jul 18 11:36:21 2024 from 192.168.10.131[root@kibana ~]# vmstatprocs -----------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 ~]# exitlogoutConnection to 192.168.10.245 closed.vmstat exit------Execute Successful!------[root@logstash ~]#
以上就是linux shell实现批量主机远程执行命令脚本的详细内容,更多关于linux shell主机远程执行命令的资料请关注8b8.cn其它相关文章!
linux shell实现批量主机远程执行命令脚本