当前位置: 首页 > 科技观察

100台小型服务器的批量管理与自动化运维

时间:2023-03-20 21:58:05 科技观察

一、脚本背景介绍企业中经常使用小型集群服务器,在日常管理中经常会遇到重复动作,比如更新备机ssh公钥在百台服务器上,/etc/passwd配置文件在百台服务器上的备份等,通常使用专用的自动化运维工具assibe。如果由于资源或技术原因没有安装此类服务,则可以通过脚本实现小型服务器集群的自动化运维。记住,只要动作重复3次以上,在自动化运维时代,必须用自动化的方式进行运维管理。2、脚本制作技术要求2.1SSH免密码登录认证服务器远程管理认证通常有两种认证方式。第一种采用对称加密算法,通过账号密码进行登录认证。对称加密是指加密和解密使用同一个密钥。最常见的算法有DES(数据加密标准)、3DES、AES(高级加密标准)等,优点是加密和解密使用同一个密码,效率高。缺点是密钥交换没有安全保障,无法确认数据来源。第二种采用非对称加密算法,使用密钥完成认证。非对称加密算法通常包括RSA和DSA。它的主要功能是生成公钥??和私钥。数据只能用公钥(数字签名)解密。公钥可以通过私钥计算出来,但是私钥不能通过公钥计算出来。具体原理如下:ssh-keygen命令用于生成公钥和私钥正确的工具,通常的用法如下命令选项含义ssh-keygen-t指定创建的密钥对的加密算法,默认是rsa-p输入旧密码,创建新的密钥对时不加这个选项,但是可以更新已有的密钥对Passwordwithprivatekey-q静默输出这个-f指定输出路径,ssh免密钥登录必须在/root/.ssh/目录下ssh-copy-id-i指定公钥所在位置[root@centos7~]#ssh-keygen-trsa-f.ssh/id_rsa#GeneratingsecretkeypairGeneratingpublic/privatersakeypair.Enterpassphrase(emptyfornopassphrase):#如果选择给私钥添加密码,提供密码Entersamepassphraseagain:使用时需要输入密码使用它,如果不输入密码,需要保护Youridentificationhasbeensavedin.ssh/id_rsa.password,一旦丢失,就相当于一把***钥匙您的公钥已保存在.ssh/id_rsa.pub.Thekeyfingerprint中:37:18:3a:18:f7:43:f1:b0:59:5a:75:88:29:bf:ac:5droot@centos7.location.com[root@centos7~]#ls.ssh/#验证生成的密钥对id_rsaid_rsa.pubknown_hosts[root@centos7~]#ssh-copy-id-i.ssh/id_rsa.pubroot@192.168.100.128#上传密钥到免登录服务器,自动加载到/root/.ssh目录####################################################################################################[root@centos6~]#ifconfigeth0eth0Linkencap:EthernetHWaddr00:0C:29:AD:7B:C1inetaddr:192.168.100.128Bcast:192.168.100.255Mask:255.255.255.0[root@centos6~]#ls.ssh/#验证发现key是通过ssh-copy-id上传的,key自动定义为authorized.keysaauthorized_keysknown_hosts#根据上传到服务器的公钥自动重命名即可在/etc/ssh/ssh_config中查看#################################此时免密登录身份验证完成##################################################2.2Expect中实现key分发数百台服务器,不可能通过数百台服务器分发公钥手动输入3次密钥,上面说到在自动化运维时代,3次以上的动作必须用自动化的思想来实现自动化运维。expect是一种交互语言,详细请参考http://www.tcl.tk2.3pssh家族命令详解pssh提供了子工具,可以实现对多台服务器的批量管理,比如批量执行某个command在多台主机上同时发出命令,管理同步过程,高效复制文件。需要注意的是,使用pssh命令时,命令参数中不支持变量(如$HOSTNAME)和通配符(如*)。如果命令参数中有变量和通配符,pssh会人为执行本地命令,而不是远程主机命令。常用的命令和选项将在下面的pssh命令详解中一一介绍:命令选项含义pssh-h指定文件中的用户主机列表-H指定主机,-H“root@host1root@host2”-i将每台主机的标准输出发送到当前终端-o指定正确的标准输出目录。如果-i显示太多,可以选择指定输出目录,自动创建一个以IP命名的文本保存输出。-e指定错误输出目录-l指定以某个用户登录,相当于user@host1中的用户-Akey认证是基于用户的,如果有的用户没有认证key,但是这个批量操作增加选项启用密码登录认证[root@centos7~]#pssh-Hroot@192.168.100.128-i"sed-i"s/SELINUX=enforcing/SELINUX=disabled/"/etc/selinux/config"#通过pssh批量关闭seLinux,这里只是举例[root@centos7~]#pssh-Hroot@192.168.100.128-isetenforce0#批量发送命令[1]01:33:24[SUCCESS]192.168.100.128[root@centos7~]#pssh-Hxuewb@192.168.100.128-ihostname[1]01:41:00[FAILURE]xuewb@192.168.100.128Exitedwitherrorcode255Stderr:pssherror:SSHrequestedapassword.PleasecreateSSHkeysorusethe-Aoptiontoprovideapassword.Permissiondenied(公钥,withgssa,密码).[root@centos7~]#pssh-Hxuewb@192.168.100.128-A-ihostname#当不支持ssh的密钥认证时,通过Warning:donotenteryourpasswordifanyoneelsehassuperuser-A选项,使用密码认证批量执行命令privilegesoraccesstoyouraccount.Password:[1]01:41:12[SUCCESS]xuewb@192.168。100.128centos6.localdomain[root@centos7/app]#pssh-H192.168.100.128-o/app-e/app-i"hostname"#保存标准错误和标准正确重定向到/app目录PSCP.PSSH命令详解pscp.pssh的作用是将本地文件批量复制到远程主机,其语法结构为:pscp[-vAr][-hhosts_file][-H[user@]host[:port]][-luser][-ppar][-ooutdir][-eerrdir][-ttimeout][-Ooptions][-xargs][-Xarg]本地远程选项用法pssh选项与pssh一致,scp选项为如下,例如:commandoptions含义pscp-pssh-v显示复制过程-a在复制过程中保留一般属性-r递归复制目录[root@centos7~]#pscp.pssh-H192.168.100.128/root/test/curl.sh/app/[1]03:22:05[SUCCESS]192.168.100.128#Localcurl.sh复制到/app/目录[root@centos7~]#pscp.pssh-hhost.txt/root/test/curl.sh/app/[1]03:22:05[SUCCESS]192.168.100.128#Localcurl.sh批量复制到/app/目录[root@centos7~]#pscp.pssh-H192.168.100.128/root/test/mcurl.sh/root/test/mysql.sh/app/[1]03:39:17[SUCCESS]192.168.100.128#批量复制多个本地文件到/app/目录[root@centos7~]#pscp.pssh-H192.168.100.128-r/root/test//app/[1]03:40:41[SUCCESS]192.168.100.128#将本地目录批量复制到/app/目录PSLURP.PSSH命令详解pslurp.pssh的作用是将远程主机的文件复制到本地batches,复制过程中注意pslurp[-vAr][-hhosts_file][-H[user@]host[:port]][-luser][-ppar][-ooutdir][-eerrdir][-t超时][-O选项][-xargs][-Xarg][-Llocaldir]远程本地(本地名称)命令选项含义pslurp-pssh-L指定从远程主机下载文件的目录,local是下载到本地后的名称,语法结构后面必须跟local-a指定主机,-H"root@host1root@host2"-rseteach主机的标准输出发送到当前终端[root@centos7~]#pslurp-H192.168.100.128-L/app/-r/app/testtest(存储到本地后的名称)[1]04:14:13[SUCCESS]192.168.100.128#将服务器中的文件批量下载到本地,-L指定下载目录,本地存储的名称到本地[root@centos7~]#pslurp-H192.168.100.128-L/app//app/mcurl。shmcurl.sh[1]04:13:13[SUCCESS]192.168.100.128#从服务器批量下载文件到本地[root@centos7~]#pslurp-H192.168.100.128-L/app//etc/passwdpawd[1]04:23:39[SUCCESS]192.168.100.128#批量下载目标服务器的passwd文件,下载到本地重命名为pawd3.脚本功能及实现过程3.1脚本运行环境服务器集群环境或管理上百台服务器,如果服务器太多还得靠专业的运维工具辅助3.2脚本功能介绍脚本在自动化运维中通常实现以下功能:(1)批量执行命令,并将结果返回到终端或日志文件;(2)批量拷贝文件,批量上传本地文件到远程主机;(3)批量下载文件,从远程主机批量下载文件到本地;3.3脚本编写思路编写自动化运维脚本的思路:第一步:生成密钥,使用Expect将公钥分发给服务端;第二步:使用pscp。pssh将脚本推送到远程主机(主机列表文件)第三步:使用pssh远程主机发送脚本指令并执行第四步:使用pslurp.pssh恢复脚本和日志文件,并进行针对性处理3.4脚本编写case第一步:写一个Expect脚本上传key#!/bin/expect#if{$argc!=2}{send_user"usage:send-rsa-idfilehost\n"exit}#definevarsetpasswordwbxue.blogsetfile[lindex$argv0]setip[lindex$argv1]#startexeccommandspawnssh-copy-id-i$fileroot@$ipexpect{"yes/on"{send"yes\r";exp_continue}"*password*"{send"$password\r"}}expecteofsecond步骤:使用bash脚本调用Expect脚本批量上传到服务器(此时已经实现免密码登录)#!/bin/bashfile=/root/.ssh/id_rsa.pubnet=192.168.100ip=$net.$nfornin{1..255};doexpectsend-rsa-pub.exp$file$ipdone第三步:编写业务脚本(script脚本***产生相关日志文件,使用回收日志进行相关处理)检测磁盘使用情况#!/bin/bash>/var/log/diskcheck.logdf|grep"/dev/sd"|whilereaddisk;dodiskused=`echo$disk|sed-r's/.*([0-9]+)%.*/\1/'`devname=`echo$disk|cut-d""-f1`[$diskused-ge1]&&echo"$devnamewillbefull:$diskused%">>/var/log/diskcheck.logdone第四步:推送脚本,发送执行脚本命令,定期回收脚本日志进行处理[root@centos7~]#pscp.pssh-H192.168.100.128/root/diskcheck.sh/app/[root@centos7~]#pssh-Hroot@192.168.100.128-ibash/app/diskcheck.sh[root@centos7~]#pslurp-H192.168.100.128-L/app//var/log/diskcheck.logdiskcheck.log也可以通过批量执行命令处理来处理,但是通过批量执行命令处理处理效率比较慢,所以推荐使用脚本处理业务,以上是一个案例示例,其他具体业务情况可以通过替换本案例中的脚本实现,满足运维行业兄弟的需求

猜你喜欢