Linux系统批量配置脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统批量配置脚本相关的知识,希望对你有一定的参考价值。

系统批量配置脚本使用手册

使用要求

  • linux操作系统(RHELkylin,凝思磐石均可用)

  • 本地计算机expect命令可用

  • sshscp命令可用

脚本组成及功能说明

  • 引导脚本 - config.sh

    该脚本会引导整个脚本组合的执行,提示用户输入远程计算机IP地址(范围)及root密码。

  • 系统配置脚本 - sysinfo-collect.sh

    该脚本中可以自行定制需要在远程计算机上执行的命令,配合引导脚本及响应脚本使用,可以完成的任务有:

  1. 在远程计算机批量执行命令;

  2. 修改远程计算机配置文件;

  3. 向远程计算机批量分发文件;

  4. 从远程计算机批量搜集文件;

响应脚本 - sysinfo-collect.exp该脚本主要用来响应以下步骤中的密码输入:

  1. 删除远程计算机上 /var/tmp/ 目录下与脚本所在文件夹名称相同的文件夹下的文件;

  2. 将本地脚本所在文件下的所有文件拷贝到远程计算机的 /var/tmp 目录下;

  3. 执行远程计算机的系统配置脚本sysinfo-collect.sh

  4. 将远程计算机中的 /usr/appsoft/software/sysinfo_zj 下的文件拷贝回本地管理端同名文件夹下;

使用方法

  1. 批量文件分发:

    首先确保sysinfo-collect.sh脚本的远程计算机命令执行部分为空,避免以前编写的命令在本次运行时执行;然后将需分发的文件和三个脚本存放在相同文件夹内,如ConfigAll文件夹,执行config.sh脚本,按要求输入远程计算机IP地址(范围)root密码,所有文件及脚本会拷贝至指定远程计算机。

  2. 批量系统配置

    sysinfo-collect.sh脚本的远程计算机命令执行部分,编辑需要远程执行的命令(如需使用变量,请先自定义变量或声明系统变量,如source /etc/bashrc),然后执行执行config.sh脚本,按要求输入远程计算机IP地址(范围)root密码

  3. 批量文件搜集

    sysinfo-collect.sh脚本的远程计算机命令执行部分,编辑命令(如需使用变量,请先自定义变量或声明系统变量,如source /etc/bashrc)将需要拷贝回本地计算机的文件首先转存到  --->  ${SYSINFO_DIR}  <---  文件夹中,然后执行config.sh脚本,按要求输入远程计算机IP地址(范围)root密码,需要搜回的文件会拷贝到本地文件夹 --->  /usr/appsoft/software/sysinfo_zj  <--- 中,每台远程主机的文件存放在其下的“远程计算机主机名+IP”的文件夹下。

使用示例

使用脚本模拟批量替换 oracle tnsnames.ora  文件,批量修改文件属主属组,批量搜集远程计算机hosts文件。

a. 模拟环境准备

IP主机名密码备注
192.168.101.202zj-5-2[email protected]本地计算机,expect命令可用,RHEL_5.9
192.168.101.206zj-6-2[email protected]远程计算机,RHEL_6.5
192.168.101.207kylin3[email protected]远程计算机,Kylin_3.0

假如每台计算机都安装了oracle 数据库,其环境变量ORACLE_HOME设置在文件 /home/oracle/.bash_profile中:

[[email protected] ~]# grep ‘ORACLE_HOME‘ /home/oracle/.bash_profile 
export ORACLE_HOME=/home/oracle/software/ceshi

本次测试tnsnames.ora文件使用123.sh代替,修改所有计算机的123.sh文件属主属组为oracle:oinstall,将所有计算机 /etc/hosts 文件搜回到本地计算机。

现在所有计算机中的123.sh文件的内容为:

 [[email protected] ~]# cat /home/oracle/software/ceshi/123.sh 
abcdf

b. 脚本配置及执行过程

本地主机192.168.101.202作为管理端,只需要该主机expect命令可用即可;

首先将三个脚本上传到管理端任一文件夹下,然后在该文件夹下创建需要分发的文件123.sh

[[email protected] ConfigAll]# ls
123.sh  config.sh  sysinfo-collect.exp  sysinfo-collect.sh
[[email protected] ConfigAll]# cat 123.sh 

This is a test.

[[email protected] ConfigAll]#

然后编辑系统配置脚本 - sysinfo-collect.sh,在该脚本中声明远程计算机环境变量,填写需要执行的命令等,示例如下:

################  如需执行命令,请在此处添加--开始  ##############################
#===============================================================================
#★Tips:
#1. 请使用root用户执行;
#2. 需要分发到远程计算机的文件请和该脚本存放在相同目录;文件会拷贝到远程计算机的--> ${DIR} 文件夹中;
#3. 脚本文件在远程计算机的操作目录请使用------>  ${DIR}  <-------代替;
#4. 需要从远程计算机拷贝回本地的文件请转存到远程计算机的--->  ${SYSINFO_Get} 或 ${SYSINFO_DIR}  <---内;
#5. ${SYSINFO_DIR}:对应本地的 “/usr/appsoft/software/sysinfo_zj”目录;
#   若存放在${SYSINFO_DIR}文件夹,建议文件名字加上主机名或IP等,避免出现不同主机的同名文件相互覆盖;
#6. 若远程搜回文件存放到${SYSINFO_Get}文件夹中,搜回本地后会存放在“/usr/appsoft/software/sysinfo_zj/主机名+IP”的不同文件夹中;
#7. ${DIR}: 对应远程计算机的 “/var/tmp/脚本所在目录的同名文件夹”;
#需要在远程计算机执行的命令,请在此处以下添加:
#================================================================================
#声明远程计算机环境变量
source /home/oracle/.bash_profile
#拷贝文件123.sh到各计算机$ORACLE_HOME下
mv -f ${DIR}/123.sh $ORACLE_HOME
#修改文件属主属组
chown -R oracle:oinstall ${ORACLE_HOME}/123.sh
#将各计算机的hosts文件取回本地
cp -ar /etc/hosts ${SYSINFO_Get}
################  如需执行命令,请在此处添加--结束  #################################

以上工作完成后,执行config.sh脚本,进行配置工作:

远程计算机拷贝回本机的文件会存放到/usr/appsoft/software/sysinfo_zj文件夹下,config.sh脚本会检查本地计算机是否存在该文件,不存在则创建;存在则提示是否清空该文件夹下的已有文件。

[[email protected] ConfigAll]# sh config.sh 

Empty DIR:/usr/appsoft/software/sysinfo_zj or not? (yes|no):_

按照提示输入起始IP终止IP,这里要求本地计算机可以ping通所有远程计算机,且所有计算机root密码相同,输入完成后,按回车键继续;

        ***  File distribution and configuration script for linux  ***

         Tips:
              1) The "expect" command is available
              2) All the computer has the same password
              3) All files in the same folder with scripts: config.sh
              4) Write your commands into the scripts: sysinfo-collect.sh

Pls input the first IP:---192.168.101.202

Pls input the last  IP:---192.168.101.207

Pls input the password:[email protected]

此时脚本会自动将其所在文件夹下的所有文件分发到远程计算机/var/tmp/脚本同名文件夹下,同时在远程计算机上执行sysinfo-collect.sh脚本中配置的命令。

执行过程示例:

spawn ssh [email protected] cd /var/tmp/ConfigAll && rm -rf *
[email protected]‘s password: 
spawn scp -r -p /usr/appsoft/software/test/ConfigAll [email protected]:/var/tmp
[email protected]‘s password: 
config.sh                                                                                                                            100% 8833     8.6KB/s   00:00    
sysinfo-collect.sh                                                                                                                   100% 4196     4.1KB/s   00:00    
123.sh                                                                                                                               100%    4     0.0KB/s   00:00    
sysinfo-collect.exp                                                                                                                  100%  842     0.8KB/s   00:00    
spawn ssh [email protected] cd /var/tmp/ConfigAll/ && sh sysinfo-collect.sh
[email protected]‘s password: 


***   Collecting Information Of kylin3   ---[ Running ]   ***

***   System Information Collection Success    ---[ Finished ]   ***

spawn scp -r -p [email protected]:/usr/appsoft/software/sysinfo_zj/* /usr/appsoft/software/sysinfo_zj
[email protected]‘s password: 
hosts                                                                                                                                100%  185     0.2KB/s   00:00    
* 192.168.101.207 *System information back to the local computer---[ OK ]

**********************************************************************************

* 192.168.101.202 *System information back to the local computer---[ OK ]
* 192.168.101.206 *System information back to the local computer---[ OK ]
* 192.168.101.207 *System information back to the local computer---[ OK ]
* 192.168.101.203 *System information back to the local computer---[ FAILED ]
* 192.168.101.204 *System information back to the local computer---[ FAILED ]
* 192.168.101.205 *System information back to the local computer---[ FAILED ]

执行过程中,脚本会跳过ping不通或者ssh无法登陆的设备,同时给出部分文件的分发过程及脚本执行结果。

这里的脚本执行是否成功是根据本地计算机/usr/appsoft/software/sysinfo_zj目录下是否搜回了远程计算机的“主机名+IP”文件夹为判断依据,并不能说明所有配置命令在远程计算机均执行成功,仅作参考。


c. 脚本执行结果

下面检查下配置脚本中的命令执行情况,预期执行的配置命令如下:

#声明远程计算机环境变量
source /home/oracle/.bash_profile
#拷贝文件123.sh到各计算机$ORACLE_HOME下
mv -f ${DIR}/123.sh $ORACLE_HOME
#修改文件属主属组
chown -R oracle:oinstall ${ORACLE_HOME}/123.sh
#将各计算机的hosts文件取回本地
cp -ar /etc/hosts ${SYSINFO_Get}
  • 检查各计算机上的123.sh文件是否替换成功并修改了属主和属组。

    本地计算机:

[[email protected] ceshi]# pwd
/home/oracle/software/ceshi
[[email protected] ceshi]# ll
总计 4
-rw-r--r-- 1 oracle oinstall 18 07-14 09:42 123.sh
[[email protected] ceshi]# cat 123.sh 

This is a test.

[[email protected] ceshi]#

远程计算机:

[[email protected] ConfigAll]# cd /home/oracle/software/ceshi/
[[email protected] ceshi]# ll
总用量 4
-rw-r--r--. 1 oracle oinstall 18 7月  14 09:41 123.sh
[[email protected] ceshi]# cat 123.sh 

This is a test.

[[email protected] ceshi]#
  • 检查各计算机的hosts文件是否搜回本地计算机。

[[email protected] ConfigAll]# cd /usr/appsoft/software/sysinfo_zj/
[[email protected] sysinfo_zj]# ls
kylin3+192.168.101.207  log  zj-5-2+192.168.101.202  zj-6-2+192.168.101.206
[[email protected] sysinfo_zj]# cat kylin3+192.168.101.207/hosts 
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1	localhost.localdomain	localhost
::1	localhost6.localdomain6	localhost6
192.168.101.207 kylin3
[[email protected] sysinfo_zj]# cat zj-6-2+192.168.101.206/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localudomain localhost6 localhost6.localdomain6
192.168.101.206 zj-6-2

脚本生成文件夹说明

a. 脚本文件存放文件夹

/var/tmp/脚本所在同名文件夹 :脚本会默认将其所在文件夹拷贝到所有计算机的/var/tmp目录下,对应sysinfo-collect.sh脚本中的${DIR}变量,对于远程计算机分发文件时,建议从该文件夹将文件移动到目标位置,而不是复制,避免占用/var/tmp目录空间。

也可以在sysinfo-collect.sh脚本中配置命令:rm -rf ${DIR},在其他配置完成后将该文件夹删除。

使用脚本删除${DIR}时注意不要删除本地计算机的,会导致后续的远程文件分发失败。

b. 搜回文件存放文件夹

/usr/appsoft/software/sysinfo_zj: 对应sysinfo-collect.sh脚本中的${SYSINFO_DIR}变量;

/usr/appsoft/software/sysinfo_zj/主机名+IP: 对应sysinfo-collect.sh脚本中的${SYSINFO_Get}变量;

如需将远程计算机文件批量搜回到本地,请先将文件转存到上述两个文件夹之一中,上述两个文件夹分别对应了不同的搜回方式:

  • 将文件转存到${SYSINFO_Get}中,搜回本地后文件会存放在/usr/appsoft/software/sysinfo_zj/主机名+IP的文件夹中;

  • 将文件转存到${SYSINFO_DIR}中,搜回本地后文件会存放在/usr/appsoft/software/sysinfo_zj文件夹中,其下的“主机名+IP”文件夹为空。

    • Tips:采用这种方式需要注意将远程主机的搜回文件加上特殊后缀:如文件名+主机名文件名+IP,否则多台远程计算机搜回的同名文件会相互覆盖,导致只剩最后采集的一台计算机的文件。

文件搜回结果展示

  • 采集方式一

#将各计算机的hosts文件取回本地
cp -a /etc/hosts ${SYSINFO_Get}

文件搜回结果为:

[[email protected] software]# tree sysinfo_zj/
sysinfo_zj/
|-- kylin3+192.168.101.207
|   `-- hosts
|-- log
|-- zj-5-2+192.168.101.202
|   `-- hosts
`-- zj-6-2+192.168.101.206
    `-- hosts

3 directories, 4 files
  • 采集方式二

#将各计算机的hosts文件取回本地
cp -ar /etc/hosts ${SYSINFO_DIR}/hosts_${NAME}

文件搜回结果为:

[[email protected] software]# tree sysinfo_zj/
sysinfo_zj/
|-- hosts_kylin3
|-- hosts_zj-5-2
|-- hosts_zj-6-2
|-- kylin3+192.168.101.207
|-- log
|-- zj-5-2+192.168.101.202
`-- zj-6-2+192.168.101.206

3 directories, 4 files

注意事项

  • 编辑完sysinfo-collect.sh脚本,执行批量配置前,请先选取一台远程主机测试脚本运行是否正常;

  • 填写IP地址范围时,请尽量少包含无法远程登陆(ping不通、ssh登陆不上)设备ip,否则会降低脚本执行效率。


本文出自 “未来人” 博客,转载请与作者联系!

以上是关于Linux系统批量配置脚本的主要内容,如果未能解决你的问题,请参考以下文章

Linux配置批量装机详解

linux批量配置ip

通过linux的shell脚本批量处理交换机配置变更

cobbler无人值守批量安装Linux系统

Linux双网卡绑定脚本

Linux系统shell脚本之批量修改服务器密码