在日常的維運工作中批量對主機的是很常見的,市面上也有許多主機批量管理的軟體,但有時候這些軟體並不能完全的滿足我們的需求。 python中剛好提供了關於主機批量管理的模組,今天就讓我們來看看如何利用python實現主機批量管理
python提供主機批量管理的模組主要有三個paramiko、fabric與pexpect,今天我們主要說的是paramiko模組,paramiko模組是第三方模組
安裝:pip install paramiko或yum install python-paramiko如果都安裝失敗的話可以使用源碼安裝
源碼包下載地址: https://github.com/paramiko/paramiko/archive/master.zip
常用操作:
ssh = paramiko.SSHClient() //實例化,ssh會話類別
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) //第一次連線自動回答為yes
ssh.connect('伺服器ip',連接埠,'使用者名稱','密碼') / /連線伺服器
stdin,stdout,stderr = ssh.exec_command("指令") //執行指令,標準輸出,指令成功返回,指令失敗回傳
ssh.close() /關閉連線
上傳、下載:
get_put = paramiko.Transport((ip,port)) //伺服器ip與連接埠(使用SFTP時使用)
get_put .connect(username="root", password="123.com") //連接服務器,用戶名和密碼
sftp = paramiko.SFTPClient.from_transport(get_put) //使用SFTP協議
sftp。批次管理:
#!/usr/bin/python
#-*- coding: utf-8 -*-
import paramiko
#import os
def Connect(ip='127.0.0.1',Port=22,user='root',pwd='123.com'):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ip, port=Port, username=user, password=pwd) # 連線伺服器# # return ssh # 使用者輸入的是一個位址還是位址範圍
__ip = ip.split('--')
if len(__ip) == 2: #如果為位址範圍
## #取出ip ip_range = int(__ip[1]) #取出的最大 host_ip_split = ip_add.split('.') #將ip以.分隔為4段 host_ip = int(host_ip) 取出的最小值 ip_3 = '.'.join(host_ip_split)+'.' #將已去除了ip的最小值的剩餘部分重新拼接 host_add_range = range(host_ip_ip_range+ #產生連線ip的範圍 add_pool = [] for i in host_add_range:## 拼接為合法的ip位址
add_pool.append(add) #產生位址池
池
elif len(__ip) == 1: #若輸入的為單一位址
valid_ip = __ip[0]
ip_value = valid_ip.split('.')[0:4] ip_value ]
return __ip ## Fa = True
while Fa:
ip = raw_input('請輸入ip位址或位址範圍: ')
exclude_ip = raw_input(
exclude_ip = raw_input('請輸入要排除的位址: ') try: ip_list = IP_ADD(ip) # #判斷使用者是否為排除位址池中的位址 exclude_add = exclude_ip.split(',') #定義排除格式 c list 排除地址## Fa = False # 33[31m位址格式錯誤\033[0m'
print '''範例:
127.0.0.1 對單一主機執行作業上使用作業 對一個位址範圍的主機執行作業
127.0.0.8,127.0.0.10 排除位址退出池中的位址
'''
continue
print '\033[31m#script_
shell_comd = raw_input('請輸入執行的指令: ') #執行的指令
if shell_comd == 'script_
# if shell_comd == 'script_# if shell_comd == 'script_
for i in ip_list: #循環位址池
#連接伺服器
stdin, stdout, stderr = comd.exec_command( shell_comd) #執行指令
stderr = stderr.read() #指令正確執行的結果
## ##if 作用 #那伺服器執行的指令
print stdout
# else:
print '\033 print stderr
except:
'\033[31m%s連線失敗\033[0m' %i
paramiko也可以實作檔案批次下載和批次上傳,原理和批次執行指令基本上一樣。
以上是使用python實現主機批次管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!