基于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主机远程执行命令的资料请关注代码网其它相关文章!
发表评论