python自動化指令碼例項100條-自動化運維基礎例項解析-Python批量登入到伺服器執行任務...
開發背景:
根據資訊系統安全等級保護的要求,需要對IDC所有資料庫伺服器進行安全檢查,以確認伺服器的安全設定是否符合等級保護要求,需要在所有資料庫伺服器上執行以下命令:
wget http://10.4.4.140/tools/check.sh
bash check.sh
對於目前現狀,我們總共目前約有mysql資料庫約60臺左右,加上oracle資料庫會更多,如果通過單一的登入到每個資料庫伺服器執行,效率是非常低的,所以寫了一個批量執行的Python指令碼。該指令碼會讀取一個定義好的伺服器列表和命令列表,然後利用了python的多程式特性,每個伺服器一個獨立程式,自動登入到對應的伺服器,執行相應的指令碼。登入認證方式包括密碼登入和金鑰登入,如果定義了金鑰,則指令碼會使用金鑰登入,否則則使用密碼登入。該指令碼比較通用,在自動化監控和運維過程中比較實用,下面將對指令碼做簡單的分析。
程式碼解析:
該指令碼共有兩個檔案,linux_batch_command.py和linux_servers.list。linux_batch_command.py用於執行自動登入和執行指令碼。linux_servers.list用於定義主機列表。
linux_batch_command.py程式碼如下:需要執行的命令定義在cmds="’" ’"’裡面,需要執行多個命令用,分隔。timeout用於定義登入伺服器和執行指令碼的超時時間,執行時間比較長的話該值請修改的比較大些。
#!//bin/env python
#ssh_cmd_ver2.py
#coding:utf-8
import pexpect
import os, sys, string, time, datetime, traceback;
from multiprocessing import Process;
cmds= '''cd /tmp && wget http://10.4.4.140/tools/check.sh && bash check.sh'''
def ssh_cmd(ip,port,user,keyfile,passwd,cmd):
if keyfile <> '':
ssh = pexpect.spawn('ssh -p%s -i %s %s@%s "%s"' % (port,keyfile, user, ip, cmd))
try:
i = ssh.expect(["Enter passphrase for key '"+keyfile+"': ", 'continue connecting (yes/no)?'],timeout=60)
if i == 0 :
ssh.sendline(passwd)
r = ssh.read()
elif i == 1:
ssh.sendline('yes ')
ssh.expect("Enter passphrase for key '"+keyfile+"': ")
ssh.sendline(passwd)
r = ssh.read()
except pexpect.EOF:
ssh.close()
r=ip+":EOF"
except pexpect.TIMEOUT:
#ssh.close()
r="ip:TIMEOUT"
return r
else:
ssh = pexpect.spawn('ssh -p%s %s@%s "%s"' % (port, user, ip, cmd))
try:
i = ssh.expect(['password: ', 'continue connecting (yes/no)?'],timeout=60)
if i == 0 :
ssh.sendline(passwd)
r = ssh.read()
elif i == 1:
ssh.sendline('yes ')
ssh.expect('password: ')
ssh.sendline(passwd)
r = ssh.read()
except pexpect.EOF:
ssh.close()
r="EOF"
except pexpect.TIMEOUT:
#ssh.close()
r="TIMEOUT"
return r
def job_task(ip,port,user,keyfile,passwd):
for cmd in cmds.split(","):
r=ssh_cmd(ip,port,user,keyfile,passwd,cmd)
print r
def main():
print("%s: controller started." % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()),));
hosts = open('./linux_servers.list');
plist = []
for host in hosts:
if host:
ip,port,user,keyfile,passwd = host.split(":")
p = Process(target = job_task, args = (ip,port,user,keyfile,passwd))
plist.append(p)
#print plist
p.start();
for p in plist:
p.join();
print("%s: controller finished." % (time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()),))
if __name__=='__main__':
main()
linux_servers.list檔案內容如下:
該檔案裡面定義需要登入執行命令的伺服器,示例如下,每個伺服器以單獨行寫在檔案裡面,第一行為密碼登入的伺服器格式示例,第二行為密碼方式登入的伺服器格式示例,定義好伺服器後執行指令碼,指令碼會根據定義的格式自動選擇登入方式
[root@hadoop-master servers]# cat linux_servers.list
10.0.2.100:22:ruzuojun:/home/ruzuojun/.ssh/id_rsa:keypasswd
10.0.2.200:22:root::passwd
執行指令碼,檢視執行結果:
執行命令後,在終端會返回每個機器的執行輸出結果,如果某個主機執行有異常則會輸出EOF,執行超時則會資料TIMEOUT.
[root@hadoop-master servers]# ./linux_batch_command.py
******************** 檢查是否開啟X-Window系統 *************************************************
[ OK ] 檢查通過
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查系統關機熱鍵是否啟用 ***********************************
[ FAILED ] 系統關機熱鍵已啟用
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查是否禁止root使用者遠端登入 ****************************************
grep: /etc/ssh/sshd_config: Permission denied
[ FAILED ] PermitRootLogin 未設定
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查歷史命令快取 ************************************
[ FAILED ] HISTFILESIZE 未設定
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
[ FAILED ] HISTSIZE 設定不當(參考值30),當前值為: 1000
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查umask **********************************************
[ FAILED ] UMASK設定不當,當前值為: 0002
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查主機信任關係 *****************************************
find: /home/caojie: Permission denied
find: /home/zabbix: Permission denied
find: /home/liyong: Permission denied
find: /home/willy: Permission denied
find: /home/oracle: Permission denied
find: /home/liuyang: Permission denied
find: /home/lost+found: Permission denied
find: /home/nagios: Permission denied
find: /home/lengzhenguo: Permission denied
find: /home/mysql: Permission denied
[ OK ] 檢查通過
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查程式、記憶體資源訪問限制 ***********************
[ FAILED ] HARD CORE設定不當,當前值為: unlimited
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
[ FAILED ] HARD RSS 未設定
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
[ FAILED ] HARD NPROC設定不當,當前值為: 131072
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查su命令限制 **********************************
auth sufficient pam_rootok.so auth include system-auth
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查sudoer賬戶 *********************************************
grep: /etc/sudoers: Permission denied
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
******************** 檢查SUID許可權檔案 ***********************************************
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1519 0 0 100 1519 0 2026 –:–:– –:–:– –:–:– 3273
……………
相關文章
- python--介面自動化鑑權例項Python
- python3+requests+unittest介面自動化例項講解Python
- 利用python實現批量自動化運維指令碼案例薦Python運維指令碼
- 建立自啟動檔案指令碼的例項指令碼
- python自動化運維之多執行緒Python運維執行緒
- Bash、Python和JavaScript哪個指令碼更適合執行自動化任務?- SurangaPythonJavaScript指令碼
- 自動化指令碼安裝mysql shell指令碼範例指令碼MySql
- 拖動滾動條實現網頁內容自動載入程式碼例項網頁
- Python多執行緒非同步任務佇列(例項)Python執行緒非同步佇列
- Oracle之 服務啟動&停止指令碼與開機自啟動(單例項)Oracle指令碼單例
- 開機自動執行python指令碼Python指令碼
- 如何使用ChatGPT來自動化Python任務ChatGPTPython
- 自動化任務執行器 Grunt 迅速上手
- 關於python呼叫zabbix api介面的自動化例項 [結合saltstack]薦PythonAPI
- python介面自動化(三十三)-python自動發郵件總結及例項說明番外篇下(詳解)Python
- Python——自動簽到指令碼Python指令碼
- 【python介面自動化】- 正則用例引數化Python
- windows自動登入linux 並執行指令碼WindowsLinux指令碼
- 自動重新啟動oracle例項 for windowsOracleWindows
- 動態載入javascript指令碼程式碼例項JavaScript指令碼
- 傳真文件自動化處理的應用例項
- dotnet使用Selenium執行自動化任務
- jmeter介面自動化:登入到新增JMeter
- 自動化瓦力多渠道打包python指令碼Python指令碼
- 配置單例項自動重啟單例
- 拖動滾動條載入資料程式碼例項
- 自動執行任務crontab
- python100例項Python
- javascript數字自動加1程式碼例項JavaScript
- JavaScrip小數自動補零程式碼例項Java
- JavaScript運動框架程式碼例項JavaScript框架
- 10個Python指令碼來自動化你的日常任務Python指令碼
- Oracle XE 自動以本地最高使用者登入例項 for windows XPOracleWindows
- 什麼是任務自動化與流程自動化? - infoworld
- 用Python開發自動化測試指令碼Python指令碼
- python辦公自動化系列之金蝶K3自動登入(一)Python
- python辦公自動化系列之金蝶K3自動登入(二)Python
- [自動化執行]沒用過Ansible,你的自動化任務會考慮用它嗎?