linux shell实现批量主机远程执行命令脚本
作者:小黑要上天
这篇文章主要介绍了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主机远程执行命令的资料请关注脚本之家其它相关文章!