自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

批量管理自動化運維100臺小規(guī)模服務(wù)器

運維 系統(tǒng)運維 自動化
在企業(yè)中經(jīng)常會用遇到小規(guī)模的集群服務(wù)器,在日常的管理中經(jīng)常會遇到重復(fù)性的動作,如更新備上百臺服務(wù)器上的ssh公鑰、備份上百臺服務(wù)器上的/etc/passwd配置文件等等,通常情況下采用專用自動化運維工具assibe。

 一、腳本背景介紹

在企業(yè)中經(jīng)常會用遇到小規(guī)模的集群服務(wù)器,在日常的管理中經(jīng)常會遇到重復(fù)性的動作,如更新備上百臺服務(wù)器上的ssh公鑰、備份上百臺服務(wù)器上的/etc/passwd配置文件等等,通常情況下采用專用自動化運維工具assibe,若因資源或技術(shù)因素沒有安裝此類服務(wù),此時可以通過腳本實現(xiàn)小規(guī)模服務(wù)器集群的自動化運維,記住只要是重復(fù)3次以上的動作,在自動化運維的時代里必須采用自動化手法進行運維管理。

二、腳本制作技術(shù)需求

2.1 SSH免密碼登陸認證

服務(wù)器的遠程管理認證通常有兩種方式認證,

***種采用對稱加密算法的賬號密碼登錄認證,對稱加密即加密和解密使用同一個密鑰,最常見的算法有DES(Data Encryption Standard)、3DES、AES(Advanced Encryption Standard)等,優(yōu)勢為加密和解密使用同一個密碼,效率高,缺點是密鑰交換無安全保障,數(shù)據(jù)來源無法確認。

第二種采用非對稱加密算法,利用密鑰完成認證,非對稱加密算法通常有RSA、DSA,其主要作用是生成公鑰和私鑰,公鑰加密的數(shù)據(jù)只能私鑰解密,私鑰加密的數(shù)據(jù)只能是公鑰解密(數(shù)字簽名),通過私鑰能算出公鑰,但通過公鑰無法推算出私鑰,具體原理見如下:

 

ssh-keygen命令用來生成公鑰和私鑰密鑰對的工具,通常用法如下

命令

選項

含義

ssh-keygen

-t

指定創(chuàng)建的密鑰對的加密算法,默認為rsa

-p

輸入舊的密碼,在新建密鑰對時不加此選項,但可更新現(xiàn)有私鑰的密碼

-q

靜默輸出此

-f

指定輸出路徑,ssh免密鑰登錄時,必須在/root/.ssh/目錄下

ssh-copy-id

-i

指定公鑰所在位置

 

  1. [root@centos7  ~]#ssh-keygen -t rsa -f .ssh/id_rsa                  #生成秘鑰對 
  2.  Generating public/private rsa key pair. 
  3.  Enter passphrase (empty for no passphrase):        #如若選擇給私鑰加口令,則在每次使用時,提供口令 
  4.  
  5. Enter same  passphrase again:                                   時,在使用時需輸入口令,如不輸入口令時,需保護好 
  6.  Your identification has been saved in .ssh/id_rsa.口令,一旦丟失相當于***鑰匙。 
  7.  Your public key has been saved in .ssh/id_rsa.pub. 
  8.  The key fingerprint is
  9.  37:18:3a:18:f7:43:f1:b0:59:5a:75:88:29:bf:ac:5d root@centos7.location.com 
  10.  
  11. [root@centos7  ~]#ls .ssh/                #驗證生成的密鑰對 
  12.  id_rsa   id_rsa.pub   known_hosts  
  13.  [root@centos7 ~]#ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.128  #將密鑰上傳到免登陸服務(wù)器, 
  14.  
  15.                                                                                                              自動加載到/root/.ssh目錄 
  16.  
  17. #################################################################################################### 
  18.  
  19. [root@centos6 ~]#  ifconfig eth0 
  20.  eth0    Link encap:Ethernet   HWaddr 00:0C:29:AD:7B:C1   
  21.             inet addr:192.168.100.128   Bcast:192.168.100.255   Mask:255.255.255.0 
  22.  
  23. [root@centos6 ~]#  ls .ssh/     #驗證發(fā)現(xiàn)通過ssh-copy-id上傳,自動將key定義為authorized.keys 
  24.  authorized_keys   known_hosts   #上傳到服務(wù)器的公鑰自動更名的依據(jù)可查看/etc/ssh/ssh_config 
  25.  
  26. ################################此時完成免密碼登錄認證##############################################  

2.2 Expect實現(xiàn)key分發(fā)

在上百臺服務(wù)器中,對公鑰分發(fā)不可能經(jīng)過上百次的手工輸入key,像前文所述在在自動化運維時代里超過3次的動作必須用自動化思想實現(xiàn)自動化運維。

Expect是交互式語言,具體學(xué)習(xí)可參考http://www.tcl.tk

2.3 pssh家族命令詳解

pssh提供了子工具,可以實現(xiàn)多臺服務(wù)器的批量管理,如同時在多臺主機上批量執(zhí)行某命令,管理同步進程,高效的復(fù)制文件,需要注意的是:使用pssh命令時,命令參數(shù)中不支持變量(如$HOSTNAME)和通配符(如*)等,如果命令參數(shù)中有變量和通配符時,pssh會人為是執(zhí)行本地的命令,而非遠程主機的命令。下面將常用命令及選項逐一介紹

pssh命令詳解:

命令

選項

含義

Pssh

-h

指定文件中用戶主機列表

-H

指定主機,-H “root@host1 root@host2 ”

-i

將每個主機標準輸出輸送到當前終端

-o

指定正確的標準輸出目錄,如果-i顯示過多,可以選擇指定輸出某個目錄,并自動創(chuàng)建以IP命名的文本用來保存輸出。

-e

指定錯誤輸出目錄

-l

指定以某用戶的方式登錄等價于user@host1中的user

-A

Key的認證基于用戶,如若沒有對某些用戶認證key,但是要批量操作加用此選項表示啟用密碼登錄認證

  

  1. [root@centos7  ~]#pssh -H root@192.168.100.128  -i  "sed -i "s/SELINUX=enforcing/SELINUX=disabled/"  /etc/selinux/config"                           #通過pssh批量關(guān)閉seLinux,在此僅舉例一個 
  2.  
  3. [root@centos7  ~]#pssh -H root@192.168.100.128  -i  setenforce 0  #批量發(fā)送指令 
  4.  
  5. [1] 01:33:24  [SUCCESS] 192.168.100.128 
  6.  
  7. [root@centos7  ~]#pssh -H xuewb@192.168.100.128  -i  hostname 
  8.  
  9. [1] 01:41:00  [FAILURE] xuewb@192.168.100.128 Exited with error code 255 
  10.  
  11. Stderr: pssh  error: SSH requested a password. Please create SSH keys or use 
  12.  
  13. the -A option to  provide a password
  14.  
  15. Permission denied  (publickey,gssapi-keyex,gssapi-with-mic,password). 
  16.  
  17. [root@centos7  ~]#pssh -H xuewb@192.168.100.128  -A -i  hostname   #當不支持ssh的key認證時,通過 
  18.  
  19. Warning: do not  enter your password if anyone else has superuser  -A選項,使用密碼認證批量執(zhí)行指令 
  20.  
  21. privileges or  access to your account. 
  22.  
  23. Password
  24.  
  25. [1] 01:41:12  [SUCCESS] xuewb@192.168.100.128 
  26.  
  27. centos6.localdomain 
  28.  
  29. [root@centos7  /app]#pssh -H 192.168.100.128 -o /app -e /app   -i "hostname" 
  30.  
  31.                                                      #將標準錯誤和標準正確重定向都保存至/app目錄下 

PSCP.PSSH命令詳解

pscp.pssh功能是將本地文件批量復(fù)制到遠程主機,其語法結(jié)構(gòu)為:

pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] local remote

選項用法pssh的選項與pssh保持一致,scp選項如下,舉例說明:

命令

選項

含義


  Pscp-pssh

            -v

顯示復(fù)制過程

            -a

復(fù)制過程中保留常規(guī)屬性

            -r

遞歸復(fù)制目錄

 

  1. [root@centos7 ~]#pscp.pssh -H 192.168.100.128 /root/test/curl.sh /app/  
  2.  
  3. [1] 03:22:05 [SUCCESS] 192.168.100.128                      #將本地curl.sh 復(fù)制到/app/目錄 
  4.  
  5. [root@centos7 ~]#pscp.pssh -h host.txt  /root/test/curl.sh /app/  
  6.  
  7. [1] 03:22:05 [SUCCESS] 192.168.100.128                      #將本地curl.sh 批量復(fù)制到/app/目錄 
  8.  
  9. [root@centos7 ~]#pscp.pssh -H 192.168.100.128  /root/test/mcurl.sh /root/test/mysql.sh /app/ 
  10. [1] 03:39:17 [SUCCESS] 192.168.100.128                      #將本地多個文件批量復(fù)制到/app/目錄 
  11.  
  12. [root@centos7 ~]#pscp.pssh -H 192.168.100.128  -r /root/test/ /app/ 
  13. [1] 03:40:41 [SUCCESS] 192.168.100.128                      #將本地目錄批量復(fù)制到/app/目錄  

PSLURP.PSSH命令詳解

pslurp.pssh功能是將遠程主機的文件批量復(fù)制到本地,在復(fù)制過程中注意

pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir] remote local(本地名)

命令

選項

含義


Pslurp-pssh

            -L

指定從遠程主機下載文件存儲的目錄,local是下載到本地后的名稱,語法結(jié)構(gòu)中必須跟local

            -a

指定主機,-H “root@host1 root@host2 ”

            -r

將每個主機標準輸出輸送到當前終端

 

  1. [root@centos7 ~]#pslurp -H 192.168.100.128 -L /app/ -r /app/test test(存儲到本地后的名稱) 
  2. [1] 04:14:13 [SUCCESS] 192.168.100.128                      #批量下載服務(wù)器中的文檔到本地,-L指定下                                                             載目錄,local存儲到本地的名稱 
  3. [root@centos7 ~]#pslurp -H 192.168.100.128 -L /app/ /app/mcurl.sh mcurl.sh 
  4. [1] 04:13:13 [SUCCESS] 192.168.100.128                      #批量下載服務(wù)器中文檔到本地 
  5. [root@centos7 ~]#pslurp -H 192.168.100.128 -L /app/ /etc/passwd pawd 
  6. [1] 04:23:39 [SUCCESS] 192.168.100.128      #批量下載目標服務(wù)器的passwd文件,下載到本地更名為pawd  

三、腳本功能及實現(xiàn)過程

3.1 腳本運行環(huán)境

服務(wù)器集群環(huán)境或百臺左右服務(wù)器的管理,如若太多服務(wù)器得借助專業(yè)運維工具assible。

3.2 腳本功能介紹

腳本在自動化運維通常實現(xiàn)如下功能:

(1)批量執(zhí)行命令,并將結(jié)果返回終端或日志文件;

(2)文件批量復(fù)制,將本地的文件批量上傳給遠程主機;

(3)文件批量下載,將遠程主機的文件批量下載至本地;

3.3 腳本編寫思路

自動化運維腳本的編寫思路:

***步:生成key,利用Expect將公鑰分發(fā)給服務(wù)器;

第二步:利用pscp.pssh向遠程主機(主機列表文件)推送腳本

第三步:利用pssh遠程主機發(fā)送執(zhí)行腳本指令

第四步:利用pslurp.pssh回收腳本及日志文件,針對性進行處理

3.4 腳本編寫案例

***步:編寫Expect腳本,實現(xiàn)key的上傳

  1. #!/bin/expect 
  2.  # 
  3.  if { $argc != 2 } { 
  4.       send_user "usage: send-rsa-id file host \n" 
  5.       exit 
  6.   } 
  7.   #define var 
  8.   set password wbxue.blog 
  9.   set file [lindex $argv 0 ] 
  10.   set ip [lindex $argv 1 ] 
  11.   #start exec command 
  12.   spawn ssh-copy-id -i $file root@$ip 
  13.   expect { 
  14.           "yes/on" {send "yes\r";exp_continue} 
  15.           "*password*" {send "$password\r"
  16.  } 
  17.   expect eof    

第二步:利用bash腳本調(diào)用Expect腳本批量給服務(wù)器上傳(此時已實現(xiàn)免密碼登錄)

  1. #!/bin/bash 
  2.   file=/root/.ssh/id_rsa.pub 
  3.   net=192.168.100 
  4.   ip=$net.$n 
  5.   for n in {1..255};do 
  6.       expect send-rsa-pub.exp $file $ip 
  7.   done     

第三步:編寫業(yè)務(wù)腳本(腳本腳本***生產(chǎn)相關(guān)日志文件,有利用回收日志進行相關(guān)處理)檢測磁盤的使用率

  1. #!/bin/bash 
  2.  
  3. >/var/log/diskcheck.log 
  4.  
  5. df |grep "/dev/sd" |while read disk ;do 
  6.  
  7.     diskused=`echo $disk|sed -r 's/.* ([0-9]+)%.*/\1/'
  8.     devname=`echo $disk |cut -d " " -f1` 
  9.     [ $diskused -ge 1 ] && echo "$devname will be full:$diskused%" >> /var/log/diskcheck.log 
  10. done  

第四步:推送腳本、發(fā)送執(zhí)行腳本指令、定期回收腳本日志進行處理

  1. [root@centos7 ~]#pscp.pssh -H 192.168.100.128 /root/diskcheck.sh /app/ 
  2.  
  3. [root@centos7 ~]#pssh -H root@192.168.100.128 -i bash /app/diskcheck.sh 
  4.  
  5. [root@centos7 ~]#pslurp -H 192.168.100.128 -L /app/ /var/log/diskcheck.log diskcheck.log  

當然也可以通過批量執(zhí)行命令進程處理,但是通過批量執(zhí)行命令處理相對效率較慢,因此推薦使用腳本處理業(yè)務(wù),如上為舉例說明的一個案例,其他業(yè)務(wù)具體情況可以通過替換此案例中的腳本來實現(xiàn)各位運維界兄弟們的需求。

責(zé)任編輯:龐桂玉 來源: 馬哥Linux運維
相關(guān)推薦

2014-08-04 10:10:35

IT運維自動化運維

2016-03-30 11:53:51

Cobbler運維運維自動化

2024-01-09 13:09:00

2011-07-25 14:53:37

Unix服務(wù)器運維

2018-11-27 11:17:50

半自動化運維服務(wù)器

2022-06-09 13:45:18

vivoK8S集群Kubernetes

2012-10-22 14:54:48

2012-05-05 21:22:40

2012-05-05 21:48:43

puppet自動化運維

2010-08-12 17:39:07

網(wǎng)站運維自動化管理

2012-05-05 22:27:46

puppet自動化運維

2018-06-23 07:31:05

2012-05-05 21:03:35

puppet自動化運維

2017-10-13 13:14:35

互聯(lián)網(wǎng)

2012-05-05 22:10:13

puppet自動化運維

2014-03-12 15:04:08

資產(chǎn)管理系統(tǒng)cmdb自動化運維

2013-04-17 15:48:51

2015-10-08 10:55:23

云服務(wù)自動化運維 ANSIBLE

2012-11-20 17:22:57

2018-07-26 13:50:37

IT架構(gòu)運維
點贊
收藏

51CTO技術(shù)棧公眾號