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