shell脚本远程批量管理主机

​ Ansible 可用于安装软件、自动执行日常任务、置备基础架构和网络组件、提高安全性和合规性、修补系统以及编排复杂的工作流,尤其是Playbook更是其核心。但是对于一些小公司来讲,其实用性就不是很普遍,通常运维工程师会通过编写shell或者Python脚本的方式实现自动化,但是若批量的管理服务器有存在一定的限制性。此文章则重点解决批量化主机管理,通过shell脚本+主机清单的方式实现类Ansible功能。

​ 在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会需要输入yes/no password等信息。而Expect是建立在tcl基础上的一个工具,他的引入就解决了shell脚本中不可交互的问题。

基本命令:

spawn:启动进程,并跟踪后续交互信息

expect:判断上次输出结果里是否包含指定的字符串,有则立即返回,否则就等待超时时间后返回,只能捕捉由spawn启动的进程的输出

send:向进程发送字符串,用于模拟用户的输入

interact:执行完成后保持交互状态,把控制权交给控制台

Timeout:指定超时时间,过期则继续执行后续指令

exp_continue:允许expect继续向下执行指令

send_user:回显命令,相当于echo

$argv 参数数组:Expect脚本可以接受从bash传递的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个…参数

interact或expect eof结束脚本的执行

案例:实际工作可根据实际需求适当修改

1、编写主机清单

cat >> /opt/host.txt << EOF
11.11.11.10	123456
11.11.11.11	Cmp,123
11.11.11.23 nbcv,123
EOF

2、编写shell脚本(注意和主机清单文件放在同一目录下)

```
#!/bin/bash

start_time=`date +%s`
username="root"
n_dir=$(pwd)

IP_tup=($(awk -F' ' '{print $1}' $n_dir/host.txt))
KE_tup=($(awk -F' ' '{print $2}' $n_dir/host.txt))

i=0
for IP in ${IP_tup[*]}
do
for KEY in ${KE_tup[$i]}
  do
{
/usr/bin/expect << EOF
  set timeout 1
  spawn ssh $username@$IP
  expect {
    "*yes/no*"          { send "yes\r" }
    "*password:"        { send "$KEY\r" }
    }
  expect "*#"           { send "hostname\r" }
  expect "*#"           { send "exit\r" }
  expect eof
EOF
}&
  i=`expr $1 + 1`
  break
  done
done
wait

stop_time=`date +%s`
total_time=`expr $stop_time - $start_time`
echo "程序实际运行时间(单位/秒):$total_time"
```

感谢阅读!

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值