亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Python之paramiko模塊和threading實現多線程登錄多臺Linux服務器

發布時間:2020-06-17 06:05:07 來源:網絡 閱讀:8520 作者:藍色_風暴 欄目:建站服務器

        有時候我們需要在多臺Linux服務器上面執行同樣的命令,或者同樣的操作,如果我們每一臺單獨登錄上去做這樣太麻煩了,所以我們可以考慮使用自動化腳本來實現。我這里使用Python多線程的方式,這樣速度更快,如果使用Shell只能一臺完了執行另外一臺效率不高。

        針對這樣的需要寫了一個Python腳本來完成這樣的工作,大致實現了我需要的效果


實現代碼:

#!/usr/bin/python
#*-*coding:utf8*-*

"""
此腳本適用于批量登錄到Linux操作系統,并執行一些簡單命令
要求所有服務器的用戶名密碼一樣,或者密鑰一樣,都能使用同一種方法登錄
執行的命令默認只輸入第一行,如果要輸出多行需要修改ssh_login函數
默認腳本是以用戶名密碼登錄,也可以改為用密鑰登錄
選項特殊說明:
-c:后面跟要執行命令,命令如w,uptime,hostname,date等,如果命令中有空格,需要用雙引號,如"cat /etc/hosts"
-a:后面跟主機,有三種寫法192.168.1.31指單臺主機,192.168.1.31,192.168.132,指定多臺主機,把逗號換成“-”指定區間

如果有很多主機,但用戶名密碼不一樣,登錄方法也不一樣,可以考慮把這些信息寫入到一個文件,
通過對文件遍歷來完成復雜環境的需求
"""

import paramiko
from optparse import OptionParser
import sys
import netaddr
import threading

#使用選項幫助信息可以使用中文
reload(sys)
sys.setdefaultencoding("utf-8")

#定義選項
usage = sys.argv[0] + " [選項]"
parser = OptionParser(usage)
parser.add_option('-c', '--commond',
                  dest='commond',
                  action='store',
                  default=False,
                  help='你要執行的命令,如:uptime')
parser.add_option('-a', '--host',
                  dest='host',
                  action='store',
                  default=False,
                  help='需要執行命令的主機,跟主機IP地址,多個IP用逗號分隔,也可以用“-”連接一個主機范圍')
options, args = parser.parse_args()

def ssh_login(ip, commond):
    "登錄并執行命令,可以更改為使用密鑰登錄"
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=ip, port=22, username='root', password='p-0p-0p-0')
    stdin, stdout, stderr = ssh.exec_command(commond)
    print('%s\t%s' %(ip, stdout.readline().rstrip()))
    ssh.close()

if __name__ == '__main__':
    if not options.commond:
        print("請指定要執行的命令")
        exit(1)
    if not options.host:
        print("請指定主機")
        exit(1)

    if ',' in options.host:
        ip = options.host.split(',')
        for i in ip:
            t = threading.Thread(target=ssh_login, args=(i, options.commond))   #使用線程方式執行,更快
            t.start()
    elif '-' in options.host:
        startip = options.host.split('-')[0]
        endip = options.host.split('-')[1]
        ip = list(netaddr.IPRange(startip, endip))        #netaddr.IPRange()用于計算IP地址區間內的所有IP
        for i in ip:
            t = threading.Thread(target=ssh_login, args=(str(i), options.commond))
            t.start()
    else:
        ip = options.host
        ssh_login(ip, options.commond)


執行方式及結果如下:

使用Python之paramiko模塊和threading實現多線程登錄多臺Linux服務器


.

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

河南省| 梨树县| 凌源市| 永福县| 奎屯市| 祁东县| 曲周县| 永修县| 遵义县| 唐海县| 抚顺市| 监利县| 宁津县| 宣武区| 商水县| 滨州市| 商城县| 龙岩市| 舞阳县| 祁门县| 云霄县| 同江市| 汾阳市| 阿尔山市| 东明县| 南安市| 葵青区| 西安市| 通海县| 资溪县| 廊坊市| 延津县| 锡林郭勒盟| 白银市| 沐川县| 松原市| 嘉黎县| 杭州市| 台东县| 苏尼特右旗| 若羌县|