1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      python中Paramiko的SSH怎么用

      這篇文章將為大家詳細(xì)講解有關(guān)python中Paramiko的SSH怎么用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

      成都創(chuàng)新互聯(lián)公司是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),小程序開發(fā),十載建站對三維植被網(wǎng)等多個行業(yè),擁有豐富的網(wǎng)站維護(hù)經(jīng)驗。

      說明

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

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

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

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

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

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

      提高效率。

      5、添加Linux的crontab。

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

      實例

      #!/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)起一個模擬終端,會話結(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 連接超時時間
              }
              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): 讀取回顯信息的超時時間. Defaults to 3.
       
              Raises:
                  EOFError: 沒有任何信息輸出,說明連接失敗。
       
              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)閉,沒有任何信息輸出")
              return output.decode('utf-8', 'ignore')
       
       
      dev = {
          "ip":"192.168.56.21",
          "username":"netdevops",
          "password":"Admin@h4c.com",
          "name": "sw1"
      }
      # sw1 = NetworkDevice(**dev)
      # ret = sw1.exec_cmd("dis version")
      # print(ret)
       
      def parse_interface_drop(output):
          """把設(shè)備的輸出隊列丟包信息解析成累加值
          命令及輸出示例如下:
          # [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):
          """登錄單臺設(shè)備,執(zhí)行指定命令,解析丟包統(tǒng)計
          """
          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í)行時間把結(jié)果寫入文件,精確到小時
          with open("./drops/%s.log"%time.strftime("%Y%m%d_%H"),'w') as f:
               for line in futures:
                  f.write(line.result() + "\n")

      關(guān)于“python中Paramiko的SSH怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


      當(dāng)前文章:python中Paramiko的SSH怎么用
      文章網(wǎng)址:http://www.ef60e0e.cn/article/gchceh.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        广东省| 江城| 吴江市| 玉溪市| 海口市| 龙川县| 色达县| 寿宁县| 中江县| 天峻县| 林西县| 天气| 财经| 红桥区| 抚远县| 临洮县| 井研县| 微博| 广元市| 防城港市| 兴文县| 澜沧| 孟州市| 济宁市| 南丰县| 淄博市| 津市市| 长白| 福贡县| 乌鲁木齐县| 岑溪市| 江源县| 老河口市| 龙州县| 余江县| 湛江市| 襄垣县| 鹤庆县| 正安县| 调兵山市| 丹寨县|