linux運維之批量公升級

2021-10-06 08:29:41 字數 2646 閱讀 9403

經常給各辦事處客戶現場打補丁或公升級,面對十幾上百臺伺服器,人工一台臺替換肯定行不通,只能批量公升級,將過程記錄下來。

批量公升級要解決的兩個主要問題就是:

1.將補丁檔案(安裝包)上傳到各伺服器;

2.各伺服器對收到的補丁檔案自動進行公升級。

下面詳解各步驟:

1.批量上傳檔案 batch.sh

#!/bin/sh

list_file=host.list

src_file=$1

dest_file=/root

cat $list_file | while read line

do host_ip=`echo $line | awk ''`

host_port=`echo $line | awk ''`

username=`echo $line | awk ''`

password=`echo $line | awk ''`

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 [email protected]

傳檔案:

# sshpass -p 123456 scp -p 22 ./test_file [email protected]:/home

到這一步就把目標檔案上傳到指定的伺服器了,接下來去完成一系列的公升級操作,上面的例子裡是去執行expect_ssh.sh指令碼。

便於閱讀和理解,這裡將處理公升級的操作單獨放到乙個指令碼裡完成。

2.自動公升級

expect_ssh.sh

#!/usr/bin/expect

set host [lindex $ar** 0]

set port [lindex $ar** 1]

set username [lindex $ar** 2]

set password [lindex $ar** 3]

set packetname [lindex $ar** 4]

set timeout 60

set cmd_prompt "]#|~]?"

spawn ssh -p $port $username@$host

expect -re "assword:" -re "permission denied, please try again." -re "connection refused" -re "connection timed out" -re $cmd_prompt eof

}# now we do some commands

exec sleep 1

expect

}exec sleep 1

expect

}exec sleep 1

expect

}exec sleep 1

expect

}exit

#interact

host、port、username、password、packetname是batch.sh中在執行./expect_ssh.sh時以引數傳遞進來的。

這裡重點是expect、spawn的使用:

expect是乙個免費的程式設計工具語言,用來實現自動和互動式任務進行通訊,而無需人的干預。expect的作者don libes在2023年開始編寫expect時對expect做有如下定義:expect是乙個用來實現自動互動功能的軟體套件 (expect [is a] software suite for automating interactive tools)。使用它系統管理員 的可以建立指令碼用來實現對命令或程式提供輸入,而這些命令和程式是期望從終端(terminal)得到輸入,一般來說這些輸入都需要手工輸入進行的。 expect則可以根據程式的提示模擬標準輸入提供給程式需要的輸入來實現互動程式執行。

spawn ssh遠端到伺服器

批量運維神器PUPPET之環境部署

puppet是一種linux unix windows平台的集中配置管理系統,使用自有的puppet描述語言,可管理配置檔案 使用者 cron任務 軟體包 系統服務等。puppet把這些系統實體稱之為資源,puppet的設計目標是簡化對這些資源的管理以及妥善處理資源間的依賴關係。本篇為您提供pupp...

Linux系統運維之運維監控 pdf格式

linux系統運維之運維監控 本文是系統運維工程師的實用手冊 主要講解基於 linux 平台運維工作中需要掌握的監控知識 本文全部基於實際應用 部署步驟詳細 可以直接複製用於生產環境的安裝配置 幫助剛剛接觸 linux運維的朋友們,迅速搭建企業級的監控平台。本文共分為五個部分 第一部分簡單的介紹了監...

linux運維之執行級別

以下內容都在hrel8環境下進行 對於linux系統有7個執行級別,我們先不看這7個執行級別都是什麼,我們先看看如何檢視自己當前的執行級別 我們可以看見有兩個結果,乙個是n,乙個是5,其中前乙個代表前乙個執行級別,後面的代表當前執行級別,那麼n代表什麼呢?n就是沒有,也就是說之前沒有切換過執行級別。...