成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

pythonParamiko的SSH怎么使用

這篇文章主要講解了“python Paramiko的SSH怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“python Paramiko的SSH怎么使用”吧!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了芒康免費(fèi)建站歡迎大家使用!

說(shuō)明

1、將所有設(shè)備信息寫入文本文檔。

簡(jiǎn)單地使用txt,將登錄信息構(gòu)建成字典。

2、初始化SSH連接和執(zhí)行命令。

3、分析此需求指定的命令和輸出結(jié)果。

將結(jié)果存儲(chǔ)在文件中。

4、增加多線程執(zhí)行。

提高效率。

5、添加Linux的crontab。

每小時(shí)收集一次信息(服務(wù)器配置)

實(shí)例

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
import time
from concurrent.futures import ThreadPoolExecutor
import paramiko
 
 
def get_device_list(filename):
    """從文本文件讀取設(shè)備列表,返回由字典組成的列表。
    文本內(nèi)容格式為:ip,用戶名,密碼,別名,例如:
    1.1.1.1 admin admin sw1
    1.1.1.2 admin admin sw2
    ......
    
    Args:
        filename ([str]): 文件名稱
    """
    with open(filename, 'r') as f:
        device_list = []
        for line in f.readlines():
            ip, username, password, name = line.strip().split()
            device_list.append(
                {
                    "ip": ip,
                    "username": username,
                    "password": password,
                    "name": name,
                }
            )
    return device_list
 
class NetworkDevice(object):
    def __init__(self, ip="", username="", password="'", name="", port=22,):
        self.conn = None
        if ip:
            self.ip = ip.strip()
        elif name:
            self.name = name.strip()
        else:
            raise ValueError("需要設(shè)備連接地址(ip 或 別名)")
        self.port = int(port)
        self.username = username
        self.password = password
        self._open_ssh()
    
    def _open_ssh(self):
        """初始化 SSH 連接,調(diào)起一個(gè)模擬終端,會(huì)話結(jié)束前可以一直執(zhí)行命令。
 
        Raises:
            e: 拋出 paramiko 連接失敗的任何異常
 
        """
        ssh_connect_params = {
            "hostname": self.ip,
            "port": self.port,
            "username": self.username,
            "password": self.password,
            "look_for_keys": False,
            "allow_agent": False,
            "timeout": 5,   # TCP 連接超時(shí)時(shí)間
        }
        conn = paramiko.SSHClient()
        conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        try:
            conn.connect(**ssh_connect_params)
        except Exception as e:
            raise e
        self.conn = conn.invoke_shell(term="vt100", width=500, height=1000)
        return ""
 
    def exec_cmd(self, cmd, recv_time=3):
        """登錄設(shè)備,執(zhí)行命令
 
        Args:
            cmd ([type]): 命令字符串
            recv_time (int, optional): 讀取回顯信息的超時(shí)時(shí)間. Defaults to 3.
 
        Raises:
            EOFError: 沒(méi)有任何信息輸出,說(shuō)明連接失敗。
 
        Returns:
            output:
        """
        cmd = cmd.strip() + "\n"
        self.conn.sendall("screen disable\n")
        self.conn.sendall(cmd)
        time.sleep(int(recv_time))
        output = self.conn.recv(1024*1024)
        if len(output) == 0:
            raise EOFError("連接可能被關(guān)閉,沒(méi)有任何信息輸出")
        return output.decode('utf-8', 'ignore')
 
 
dev = {
    "ip":"192.168.56.21",
    "username":"netdevops",
    "password":"Admin@h3c.com",
    "name": "sw1"
}
# sw1 = NetworkDevice(**dev)
# ret = sw1.exec_cmd("dis version")
# print(ret)
 
def parse_interface_drop(output):
    """把設(shè)備的輸出隊(duì)列丟包信息解析成累加值
    命令及輸出示例如下:
    # [H3C]dis qos queue-statistics interface outbound | in "^ Drop"
    #  Dropped: 0 packets, 0 bytes
    """
    ptn = re.compile(r"\s(\S+):\s+(\d+)\s+(\S+),\s+(\d+)\s+(\S+)")
    count = 0
    for i in ptn.findall(output):
        count += int(i[1])
    return count
 
def run(cmd, **conn_parms):
    """登錄單臺(tái)設(shè)備,執(zhí)行指定命令,解析丟包統(tǒng)計(jì)
    """
    sw = NetworkDevice(**conn_parms)
    output = sw.exec_cmd(cmd)
    drop_count = parse_interface_drop(output)
    return "%s %s %s"%(
        conn_parms.get("name"),
        conn_parms.get("ip"),
        drop_count)
 
# cmd = r'dis qos queue-statistics interface outbound | in "^ Drop"'
# ret = run(cmd,**dev)
# print(ret)
 
if __name__== "__main__":
    """獲取設(shè)備列表,使用多線程登錄設(shè)備獲取信息并返回
    """
    with ThreadPoolExecutor(10) as pool:
        futures = []
        cmd = r'dis qos queue-statistics interface outbound | in "^ Drop"'
        dev_info = get_device_list("./iplist.txt")
        for d in dev_info:
            future = pool.submit(run, cmd, **d)
            futures.append(future)
        # for f in futures:
        #     print(f.result())
    # 根據(jù)執(zhí)行時(shí)間把結(jié)果寫入文件,精確到小時(shí)
    with open("./drops/%s.log"%time.strftime("%Y%m%d_%H"),'w') as f:
         for line in futures:
            f.write(line.result() + "\n")

感謝各位的閱讀,以上就是“python Paramiko的SSH怎么使用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)python Paramiko的SSH怎么使用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁(yè)名稱:pythonParamiko的SSH怎么使用
地址分享:http://jinyejixie.com/article2/jdopoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航自適應(yīng)網(wǎng)站、微信小程序、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
崇州市| 遂平县| 潼关县| 京山县| 含山县| 靖远县| 大城县| 宁武县| 蒙城县| 正定县| 马公市| 儋州市| 开平市| 漯河市| 德惠市| 呼图壁县| 葵青区| 都江堰市| 灌云县| 莎车县| 东台市| 墨江| 修武县| 杭州市| 女性| 余干县| 谢通门县| 宜黄县| 华池县| 镇沅| 新营市| 曲沃县| 保定市| 同江市| 博野县| 桦甸市| 陈巴尔虎旗| 台北市| 成都市| 伊川县| 兴安盟|