linux运维之批量升级

经常给各办事处客户现场打补丁或升级,面对十几上百台服务器,人工一台台替换肯定行不通,只能批量升级,将过程记录下来。

批量升级要解决的两个主要问题就是:

1.将补丁文件(安装包)上传到各服务器;

2.各服务器对收到的补丁文件自动进行升级。

下面详解各步骤:

1.批量上传文件 batch.sh

关键词 sshpass while

#!/bin/shlist_file=host.list
src_file=$1
dest_file=/rootcat $list_file | while read line
dohost_ip=`echo $line | awk '{print $1}'`host_port=`echo $line | awk '{print $2}'`username=`echo $line | awk '{print $3}'`password=`echo $line | awk '{print $4}'`echo "$host_ip:$host_port"sshpass -p $password scp -P $host_port $src_file $username@$host_ip:$dest_file./expect_ssh.sh $host_ip $host_port $username $password $src_file
done 

host.list文件里保存的是需要升级的服务器信息,while每次读取该文件一行获取到ip、端口、用户名、密码,再使用sshpass scp将目标文件传到服务器里。

目标文件(补丁)通过参数1传进来,保存在目标服务器的路径src_file,这里是/root

host.list:

10.88.10.11 22 root 123456
10.88.10.12 22 root 123456
10.88.10.13 22 root 123456
10.88.10.14 22 root 123456
10.88.10.15 22 root 123456

关于sshpass

ssh不能在登录命令行中带上密码直接登录,需要在出现提示后才可输入密码进行登录。sshpass的出现,解决了这一问题。sshpass用于非交互SSH的密码验证,可以使用 -p 参数指定明文密码,然后回车直接登录远程服务器,无须再次输入密码。它支持密码从命令行、文件、环境变量中读取。

登录:

# sshpass -p 123456 ssh root@192.168.13.111

传文件:

# sshpass -p 123456 scp -P 22 ./test_file root@192.168.13.111:/home

到这一步就把目标文件上传到指定的服务器了,接下来去完成一系列的升级操作,上面的例子里是去执行expect_ssh.sh脚本。

便于阅读和理解,这里将处理升级的操作单独放到一个脚本里完成。

2.自动升级

关键词 expect spawn

expect_ssh.sh

#!/usr/bin/expectset host [lindex $argv 0]
set port [lindex $argv 1]
set username [lindex $argv 2]
set password [lindex $argv 3]
set packetname [lindex $argv 4]set timeout 60
set cmd_prompt "]#|~]?"spawn ssh -p $port $username@$host
expect {
-re "(yes/no)?" {
send "yes\r"
} -re "assword:" {
send "$password\r"
} -re "Permission denied, please try again." {
exit
} -re "Connection refused" {
exit
} -re "Connection timed out" {
exit
} -re $cmd_prompt {
send "\r"
} eof {
exit
}
}# now we do some commands
exec sleep 1
expect {
-re $cmd_prompt {
send "cd /root; rm -rf patch_pkg\r"
}
}exec sleep 1
expect {
-re $cmd_prompt {
send "tar zxvf $packetname\r"
}
}exec sleep 1
expect {
-re $cmd_prompt {
send "cd ./patch_pkg; ./update.sh\r"
}
}exec sleep 1
expect {
-re "update success" {
send "exit\r"
}
}exit
#interact

host、port、username、password、packetname是batch.sh中在执行./expect_ssh.sh时以参数传递进来的。

这里重点是expect、spawn的使用:

expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。使用它系统管理员 的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。 Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。

spawn ssh远程到服务器

expect{} 在括号里模拟交互的操作,-re捕获终端输出的内容最后关键词(不使用-re也可以),若存在,则利用send往终端发送命令,遇到报错,可以使用exit退出或自行定义其它操作。上述示例脚本里执行的操作流程是:远程到指定服务器;输入密码登录;进入到/root(第一步batch.sh里已经将补丁xxx.tar.gz放到/root路径),解压该文件;进入到解压出来的目录patch_pkg,执行里面的升级脚本update.sh。

基本思路就是这样,下一篇讲update.sh里的相关操作

linux运维之批量升级相关推荐

  1. 详解Linux运维工程师打怪升级篇

    详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼 ...

  2. Linux运维之批量下载指定网站的100个图片文件,并找出大于200KB的文件

    题目为: 有一百个图片文件,它们的地址都是 http://down.fengge.com/img/1.png http://down.fengge.com/img/2.png - 一直到http:// ...

  3. Linux运维并行批量操作命令pssh的使用

    假如同时给上千台服务器执行一个命令,拷贝一个文件,杀一个进程等,有什么简化运维管理的工具呢?在小型使用中我都是使用for循 环,数量巨大,一方面不确定操作是否成功,一方面for循环语句性能不好估计且是 ...

  4. linux软件工程师_运维工程师打怪升级之路

    前不久,有一些读者朋友跟我聊到关于 Linux 运维方向的问题,不知道自己该学什么?怎么学?甚至对自己今后的职业规划发展方向,都没有明确.这也就充分说明了自己适合做什么方向,这个领域究竟适不适合自己去 ...

  5. linux ntpd服务器,Linux运维知识之Linux升级NTPD服务器-编译安装ntp-4.2.8p9与配置NTPD服务器...

    本文主要向大家介绍了Linux运维知识之Linux升级NTPD服务器-编译安装ntp-4.2.8p9与配置NTPD服务器,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 1. 系 ...

  6. Linux 运维必备150 个命令,值得收藏!

    Linux 运维必备 150 个命令,请配合下面的网站使用.定位你需要使用的命令,然后去这个网站查询详细用法即可. 地址:wangchujiang.com/linux-command/ 这个网站来自 ...

  7. 如何迅速掌握并提高linux运维技能

    之前曾经写过一篇如何学习Linux的文章,得到了很多反馈,大家都在分享自己的学习经验和体会,并且也提出了不少意见和建议.学习这个事情其实是说起来容易,做起来就很难,虽然给大家提高了很多学习linux的 ...

  8. Linux运维基础进阶——PPT汇总

    Linux运维基础 admin day1--云网络基础 day2--Linux系统简介.安装Linux系统.Linux基本操作 day3--命令行基础.目录和文件管理 day4--管理用户和组.tar ...

  9. linux运维是做什么工作的?有哪些岗位?

    很多即将毕业的计算机专业相关的大学生们都在问,linux运维是做什么工作的?有哪些岗位?今天我们就来简单聊聊. linux运维是做什么工作的? 用一句话概括就是维护Linux系统以及系统之上的相关软件 ...

最新文章

  1. 运维笔记--postgresql占用CPU问题定位
  2. IOS NSArray 倒序
  3. Windows 8 IIS中配置PHP运行环境的方法
  4. 深入浅出设计模式——组合模式(Composite Pattern)
  5. Account group 0170 reserved for consumers
  6. Vue笔记(六)——Vue组件通信Vuex
  7. 【Android Developers Training】 7. 添加Action Buttons
  8. Office 2007无法卸载也无法安装的解决
  9. oracle mysql odbc驱动程序_oracle odbc驱动下载
  10. 2022-01-11每日刷题打卡
  11. Delphi编程(二)__Delphi安装
  12. FileUpload类中FileUpload1.FileName和FileUpload1.PostedFile.FileName的区别
  13. 最小二乘法计算平面度
  14. 40Gbit和100Gbit的网络可视性解决方案
  15. tensorflow-serving源码阅读1
  16. C++ protected 解析
  17. 简单爬取网易云音乐评论(新手报到)
  18. ROS——基于python3实现opencv图像处理任务
  19. 股票模拟交易日志(七)
  20. 社区说|浅谈量子计算机和 Cirq

热门文章

  1. 群环域,理想商环,原根复习
  2. 机器学习—正则化方法—L1正则化、L2正则化
  3. 关于CORBA实现的介绍
  4. 无线节点的空中唤醒技术解析
  5. Eclipse插件简介
  6. Serverlet简介及理解
  7. stripped 和 not stripped
  8. 思维导图 · B端业务的难点
  9. 学生管理系统(大数据实验室)
  10. SECS连接模式中active与passive