2023年12月9日發(fā)(作者:劉邦)

Python通過(guò)paramiko批量遠(yuǎn)程主機(jī)執(zhí)行命令
一、前言
在日常運(yùn)維的過(guò)程中,經(jīng)常需要登錄主機(jī)去執(zhí)行一些命令,有時(shí)候需要登錄一批主機(jī)執(zhí)行相同的命,手動(dòng)登錄執(zhí)行的化效率太慢, 所以可
以通過(guò)Python的paramiko模塊批量執(zhí)行,本篇文章基于python2.7。
二、同步執(zhí)行
根據(jù)ip列表按順序執(zhí)行,缺點(diǎn)是如果命令耗時(shí)長(zhǎng),主機(jī)很多的話,執(zhí)行效率較慢
# -*- encoding: utf-8 -*-
import paramiko
import traceback
def ssh(sys_ip, urname, password, cmds):
try:
# 創(chuàng)建ssh客戶端
client = ent()
# 第一次ssh遠(yuǎn)程時(shí)會(huì)提示輸入yes或者no
_missing_host_key_policy(dPolicy())
# 密碼方式遠(yuǎn)程連接
t(sys_ip, 22, urname=urname, password=password, timeout=5)
# 互信方式遠(yuǎn)程連接
# key_file = _private_key_file("/root/.ssh/id_rsa")
# t(sys_ip, 22, urname=urname, pkey=key_file, timeout=20)
# 執(zhí)行命令
stdin, stdout, stderr = _command(cmds)
# 獲取命令執(zhí)行結(jié)果,返回的數(shù)據(jù)是一個(gè)list
result = nes()
if len(result)>0:
return sys_ip + ":" + str(result[0])
el:
return sys_ip + ":" + "none"
except Exception, e:
print sys_ip+" error:"+str(e)
print _exc()
finally:
()
if __name__ == "__main__":
ips='''10.198.1.1
10.198.1.2
10.198.1.3
10.198.1.4
10.198.1.5
10.198.1.6
10.198.1.7
10.198.1.8
10.198.1.9
'''
#根據(jù)n分割ip
ip_list = ("n")
urname = "test"#主機(jī)用戶名
password = "test"#主機(jī)密碼
cmds = "pwd"#需要執(zhí)行的命令
for ip in ip_list:
ssh(ip, urname, password, cmds)
二、異步執(zhí)行
同步執(zhí)行如果機(jī)器太多耗時(shí)長(zhǎng),效率就比較低,就可以使用異步方法同時(shí)執(zhí)行,缺點(diǎn)是如果同時(shí)執(zhí)行太多程序會(huì)有問(wèn)題,所以加了sleep。
# -*- encoding: utf-8 -*-
import time
import paramiko
import traceback
from threading import Thread
def async(f): def wrapper(*args, **kwargs):
thr = Thread(target=f, args=args, kwargs=kwargs)
()
return wrapper
@async
def ssh(sys_ip, urname, password, cmds):
try:
# 創(chuàng)建ssh客戶端
client = ent()
# 第一次ssh遠(yuǎn)程時(shí)會(huì)提示輸入yes或者no
_missing_host_key_policy(dPolicy())
# 密碼方式遠(yuǎn)程連接
t(sys_ip, 22, urname=urname, password=password, timeout=5)
# 互信方式遠(yuǎn)程連接
# key_file = _private_key_file("/root/.ssh/id_rsa")
# t(sys_ip, 22, urname=urname, pkey=key_file, timeout=20)
# 執(zhí)行命令
stdin, stdout, stderr = _command(cmds,timeout=30)
# 獲取命令執(zhí)行結(jié)果,返回的數(shù)據(jù)是一個(gè)list
result = nes()
if len(result)>0:
print sys_ip + ":" + str(result[0])
el:
print sys_ip + ":" + "none"+"n"
except Exception, e:
print sys_ip+" error:"+str(e)+"n"
print _exc()
finally:
()
if __name__ == "__main__":
ips='''10.198.1.1
10.198.1.2
10.198.1.3
10.198.1.4
10.198.1.5
10.198.1.6
10.198.1.7
10.198.1.8
10.198.1.9
'''
#根據(jù)n分割ip
ip_list = ("n")
urname = "test"#主機(jī)用戶名
password = "test"#主機(jī)密碼
cmds = "pwd"#需要執(zhí)行的命令
while (True):
ipl = ip_list[0:5]#每次拿五個(gè)
for ip in ipl:
ssh(ip, urname, password, cmds)
(3)
del ip_list[0:5]#刪除5個(gè)
if len(ip_list) == 0: break#如果沒(méi)了退出
本文發(fā)布于:2023-12-09 21:22:39,感謝您對(duì)本站的認(rèn)可!
本文鏈接:http://www.newhan.cn/zhishi/a/1702128159241127.html
版權(quán)聲明:本站內(nèi)容均來(lái)自互聯(lián)網(wǎng),僅供演示用,請(qǐng)勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。
本文word下載地址:Python通過(guò)paramiko批量遠(yuǎn)程主機(jī)執(zhí)行命令.doc
本文 PDF 下載地址:Python通過(guò)paramiko批量遠(yuǎn)程主機(jī)執(zhí)行命令.pdf
| 留言與評(píng)論(共有 0 條評(píng)論) |