python 專案 簡單的主機批量管理工具

2021-08-23 12:41:48 字數 3244 閱讀 3157

主機分組

登入後顯示主機分組,選擇分組後顯示主機列表

可批量執行命令,上傳檔案,結果實時返回

主機使用者名稱密碼可以不同

+--host_manage

+--ftp_client #客戶端

| +--database #資料庫

| +--management.py #入口程式

| +--readme

| +--test.py #測試程式

| +--__init__.py

+--__init__.py

readme:

###作業題目:簡單主機批量管理工具

需求:主機分組

登入後顯示主機分組,選擇分組後檢視主機列表

可批量執行命令、傳送檔案,結果實時返回

主機使用者名稱密碼可以不同

###目錄結構

+--host_manage

+--ftp_client #客戶端程式

| +--database #資料庫

| +--management.py #入口程式

| +--readme

| +--test.py #測試程式

| +--__init__.py

+--__init__.py

###注釋

上傳檔案時,命令格式:

put database /tmp/db

###執行環境

windows系統

python3.0+

database:

,

"192.168.20.219": },

"group2": }

}

management.py

import json,threading,paramiko

class remotehost(object):

def __init__(self,host,port,username,password,cmd):

self.host=host

self.port=port

self.username=username

self.password=password

self.cmd=cmd

def command(self):

ssh = paramiko.sshclient() # 建立物件

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy)#連線不在know_hosts檔案中的主機

ssh.connect(hostname=self.host, port=self.port, username=self.username, password=self.password)

stdin, stdout, stderr = ssh.exec_command(self.cmd) # 執行命令

res, err = stdout.read(), stderr.read()

result = res if res else err

print("[%s]".center(50,'-')%self.host)

print(result.decode())

ssh.close() # 關閉

def put(self):#上傳檔案

try:

transport = paramiko.transport(self.host, self.port)

transport.connect(username=self.username, password=self.password) # 連線

sftp = paramiko.sftpclient.from_transport(transport)

sftp.put(self.cmd.split()[1],self.cmd.split()[2]) # 上傳檔案

transport.close()

print("\033[32;1m[%s]成功上傳[%s]!\033[0m"%(self.host,self.cmd.split()[1]))

except exception as error:

print("\033[31;1m[%s]上傳[%s]失敗!\033[0m"%(self.host,error))

def run(self):#反射

cmd_str=self.cmd.split()[0]

if hasattr(self,cmd_str):

getattr(self,cmd_str)()

else:

setattr(self,cmd_str,self.command)

getattr(self,cmd_str)()

if __name__=="__main__":

with open("database","r") as file:#開啟資料庫

data_dict=json.loads(file.read())#讀資料

for k in data_dict:

print(k) #列印組名

group_choice=input(">>請輸入組:").strip()

if data_dict.get(group_choice):

host_dict=data_dict[group_choice] #建立主機字典

for k in host_dict:

print(k) #列印出該組裡的主機名

while true:

cmd=input(">>請輸入命令:").strip()

thread_list=

if cmd: #命令不為空

for k in host_dict:

host,password,username,port=k,host_dict[k]["password"],host_dict[k]["username"],host_dict[k]["port"]

func=remotehost(host,port,username,password,cmd)#建立類的例項化

t=threading.thread(func.run)#建立執行緒

t.start()

for t in thread_list:

t.join()

else:

print("\033[31;1m命令不存在、033[0m")

簡簡單單批量安裝windows主機

煮酒品茶 利用windows部署服務安裝好像不是全自動的,而且比較麻煩。這裡介紹一種簡單的方法。pxe批量安裝 windows 作業系統 述 由於前面已經成功用pxe dhcp tftp http kickstart 安裝linux 系統,並且已經把原理講清了,所以這一篇是工具篇,略過就成。參考文章...

簡簡單單批量安裝windows主機

煮酒品茶 利用windows部署服務安裝好像不是全自動的,而且比較麻煩。這裡介紹一種簡單的方法。pxe批量安裝 windows 作業系統 述 由於前面已經成功用pxe dhcp tftp http kickstart 安裝linux 系統,並且已經把原理講清了,所以這一篇是工具篇,略過就成。參考文章...

簡簡單單批量安裝windows主機

煮酒品茶 利用windows部署服務安裝好像不是全自動的,而且比較麻煩。這裡介紹一種簡單的方法。pxe批量安裝 windows 作業系統 述 由於前面已經成功用pxe dhcp tftp http kickstart 安裝linux 系統,並且已經把原理講清了,所以這一篇是工具篇,略過就成。參考文章...