主機分組
登入後顯示主機分組,選擇分組後顯示主機列表
可批量執行命令,上傳檔案,結果實時返回
主機使用者名稱密碼可以不同
+--host_managereadme:+--ftp_client #客戶端
| +--database #資料庫
| +--management.py #入口程式
| +--readme
| +--test.py #測試程式
| +--__init__.py
+--__init__.py
###作業題目:簡單主機批量管理工具
需求:主機分組
登入後顯示主機分組,選擇分組後檢視主機列表
可批量執行命令、傳送檔案,結果實時返回
主機使用者名稱密碼可以不同
###目錄結構
+--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 系統,並且已經把原理講清了,所以這一篇是工具篇,略過就成。參考文章...