小試牛刀之python實現批量獲取主機相關資料

2021-09-20 23:23:34 字數 4161 閱讀 8924

一、場景概述

剛入職新公司的第3天,接到任務說需要獲取100多台物理伺服器的資訊,其中有:主機名、ip位址、磁碟數量,磁碟裝置編號。悲催的是現有的生產環境沒有任何可用的工具去做這個事情,本想用ansible去搞,但因對ansible還不是很熟悉,因此決定徒手擼乙個指令碼來實現,所以呢才有了此指令碼的誕生。

二、指令碼的基本思路

1、python pexpect模組,用該模組來實現ssh連線

2、連線後在遠端主機跑相關命令

3、返回結果

4、返回的結果隨便你怎麼處理,視覺化也好,分析也好,儲存到資料庫也行

三、**如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

#!/usr/bin/env python

#describe:

#   gets the physical hard disk number of each host

#author: tantianran

#email: [email protected]

#time:  2016-10-09 17:28

# -*- coding: utf-8 -*-

importpexpect

defssh_cmd(ip,shell_cmd):

passwd='1qaz#edc'

ssh=pexpect.spawn('ssh root@%s "%s"'%(ip, shell_cmd))

try:

i=ssh.expect(['password:','continue connecting (yes/no)?'], timeout=5)

ifi==0:

ssh.sendline(passwd)

elifi==1:

ssh.sendline('yes\n')

ssh.expect('password: ')

ssh.sendline(passwd)

ssh.expect('#')

ssh.sendline(shell_cmd)

ssh.expect('#')

exceptpexpect.eof:

data=ssh.before#讀取shell命令執行的結果

ssh.close()

exceptpexpect.timeout:

print"connect timeout..."

ssh.close()

returndata#返回shell命令執行結果

defget_host():

cmd='''

name=`hostname`

ip=`ifconfig eth0 | grep inet|grep -v 127.0.0.1|grep -v inet6|awk ''`

disk=`ls -l /dev/vd[a-z] | wc -l`

list=`ls -l /dev/vd[a-z] | awk ''`

echo "hostname:"$name "ip"$ip "disk:"$disk "info:"$list

'''

returncmd

foriinrange(165,167):

ipaddr='192.168.122.%s'%i

data=ssh_cmd(ipaddr,get_host())

printdata

f=open('host_info.txt','a')

f.write(data)

四、測試環境說明

在寫這個指令碼的時候,建立了兩台vm用來模擬生產環境的乙個場景。    vm01:192.168.122.165,vm02:192.168.122.166

小試牛刀之webpack dev server

模組熱替換 用express搭建過乙個小型的伺服器,用過監聽模式來解決手動npm run build的麻煩,這次使用webpack dev server來搭建乙個伺服器,且一併解決 手動編譯 手動重新整理瀏覽器 的麻煩。目錄 詳細 root div body html import from mat...

python 演算法 小試牛刀

1.列印從1到100,碰到3倍數用fizz代替,碰到5倍數,用buzz代替,3和5的倍數,fizzbuzz代替 def func for i in range 1,101 if i 3 0 i 5 0 print fizzbuzz elif i 3 0 print fizz elif i 5 0 p...

Python小試牛刀 迴圈

斐波那契數列,數列前兩項為1,之後每一項都是前兩項之和。usr bin env python3 a,b 0,1 while b 100 print b a,b b,a b預設print輸出結果後會自動換行,如果不希望換行,只做間隔的話,就通過另乙個引數end來替換這個換行符 print a,end ...