Linux系统批量配置脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统批量配置脚本相关的知识,希望对你有一定的参考价值。
系统批量配置脚本使用手册
使用要求
linux操作系统(RHEL,kylin,凝思磐石均可用)
本地计算机
expect
命令可用ssh
、scp
命令可用
脚本组成及功能说明
引导脚本 - config.sh
该脚本会引导整个脚本组合的执行,提示用户输入远程计算机IP地址(范围)及root密码。
系统配置脚本 - sysinfo-collect.sh
该脚本中可以自行定制需要在远程计算机上执行的命令,配合引导脚本及响应脚本使用,可以完成的任务有:
在远程计算机批量执行命令;
修改远程计算机配置文件;
向远程计算机批量分发文件;
从远程计算机批量搜集文件;
响应脚本 - sysinfo-collect.exp该脚本主要用来响应以下步骤中的密码输入:
删除远程计算机上 /var/tmp/ 目录下与脚本所在文件夹名称相同的文件夹下的文件;
将本地脚本所在文件下的所有文件拷贝到远程计算机的 /var/tmp 目录下;
执行远程计算机的系统配置脚本sysinfo-collect.sh;
将远程计算机中的 /usr/appsoft/software/sysinfo_zj 下的文件拷贝回本地管理端同名文件夹下;
使用方法
批量文件分发:
首先确保sysinfo-collect.sh脚本的远程计算机命令执行部分为空,避免以前编写的命令在本次运行时执行;然后将需分发的文件和三个脚本存放在相同文件夹内,如ConfigAll文件夹,执行config.sh脚本,按要求输入远程计算机IP地址(范围)和root密码,所有文件及脚本会拷贝至指定远程计算机。
批量系统配置
在sysinfo-collect.sh脚本的远程计算机命令执行部分,编辑需要远程执行的命令(如需使用变量,请先自定义变量或声明系统变量,如
source /etc/bashrc
),然后执行执行config.sh脚本,按要求输入远程计算机IP地址(范围)和root密码。批量文件搜集
在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.202 | zj-5-2 | [email protected] | 本地计算机,expect命令可用,RHEL_5.9 |
192.168.101.206 | zj-6-2 | [email protected] | 远程计算机,RHEL_6.5 |
192.168.101.207 | kylin3 | [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系统批量配置脚本的主要内容,如果未能解决你的问题,请参考以下文章