首页 > 编程语言 >Python ssh远程登录设备执行命令

Python ssh远程登录设备执行命令

时间:2022-12-30 16:13:27浏览次数:45  
标签:执行命令 logging log Python self command ssh string

# -*-encoding:utf-8 -*-
"""
@Time : 2022/12/30 10:10
@Auth : ruqing
@File :ssh_sonic.py
@IDE :PyCharm
@Motto:ABC(Always Be Coding)
"""
import sys, logging
import os
import time
from paramiko.client import SSHClient, AutoAddPolicy
from paramiko import AuthenticationException
from paramiko.ssh_exception import NoValidConnectionsError


class SshClient():
    def __init__(self):
        self.ssh_client = SSHClient()
        if not os.path.exists('log'):
            os.mkdir('log')

        # 生成log文件名
        datefmt = '%Y%m%d-%H%M%S'
        strftime = time.strftime(datefmt)
        self.logname = './log/' + '6865_sonic' + '-' + strftime + '.log'

    def ssh_login(self, host_ip, username, password):
        try:
            self.ssh_client.set_missing_host_key_policy(AutoAddPolicy())
            self.ssh_client.connect(host_ip, port=2081, username=username, password=password)
        except AuthenticationException:
            logging.warning('username or password error')
            return 1001
        except NoValidConnectionsError:
            logging.warning('connect time out')
            return 1002
        except:
            print("Unexpected error:", sys.exc_info()[0])
            return 1003
        return 1000

    def execute_some_command(self, command):
        stdin, stdout, stderr = self.ssh_client.exec_command(command)
        result = (stdout.read().decode())
        self.log(result)
        return result

    def ssh_logout(self):
        self.ssh_client.close()

    def log(self, string):

        if string.strip() == '':
            return

        formatter = logging.Formatter('%(asctime)s %(message)s', datefmt='%Y%m%d-%H%M%S--')
        ch = logging.StreamHandler()
        ch.setFormatter(formatter)
        fh = logging.FileHandler(self.logname)
        fh.setFormatter(formatter)

        formatter2 = logging.Formatter('%(message)s')
        ch2 = logging.StreamHandler()
        ch2.setFormatter(formatter2)
        fh2 = logging.FileHandler(self.logname)
        fh2.setFormatter(formatter2)

        ch3 = logging.StreamHandler()
        ch3.setFormatter(formatter)
        ch3.terminator = ''
        fh3 = logging.FileHandler(self.logname)
        fh3.setFormatter(formatter)
        fh3.terminator = ''

        logger = logging.getLogger('mylogger1')
        logger.setLevel(logging.INFO)
        logger.addHandler(ch)
        logger.addHandler(fh)

        logger2 = logging.getLogger('mylogger2')
        logger2.setLevel(logging.INFO)
        logger2.addHandler(ch2)
        logger2.addHandler(fh2)

        logger3 = logging.getLogger('mylogger3')
        logger3.setLevel(logging.INFO)
        logger3.addHandler(ch3)
        logger3.addHandler(fh3)

        string = string.split('\n')
        logger2.info(string[0].strip('\r').strip('\n'))
        if len(string) >= 2:
            for i in range(1, len(string) - 1):
                logger.info(string[i].strip('\r').strip('\n'))
            logger3.info(string[-1].strip('\r').strip('\n'))

        logger.removeHandler(ch)
        logger.removeHandler(fh)
        logger2.removeHandler(ch2)
        logger2.removeHandler(fh2)
        logger3.removeHandler(ch3)
        logger3.removeHandler(fh3)


if __name__ == "__main__":
    ssh = SshClient()
    for i in range(10000):
        ssh.log('*************************{}****************************'.format(i + 1))
        if ssh.ssh_login(host_ip="192.168.107.62", username="adminadmin", password="Accton123") == 1000:
            ssh.execute_some_command('sudo reboot -y')
            ssh.ssh_logout()
            time.sleep(100)
            if ssh.ssh_login(host_ip="192.168.107.62", username="adminadmin", password="Accton123") == 1000:
                ssh.execute_some_command(command='timedatectl')
                ssh.execute_some_command(command='sudo docker ps -a')
                check = ssh.execute_some_command(command='lspci |grep "Broadcom"')
                if 'Gigabit Ethernet PCIe' not in check:
                    ssh.log('脚本停止执行,请查看日志')
                    ssh.log('!!!!!!!!!!!!!!!!!!!!!!!!!!')
                    break
                ssh.ssh_logout()

 

标签:执行命令,logging,log,Python,self,command,ssh,string
From: https://www.cnblogs.com/path602/p/17015137.html

相关文章

  • 通过VB脚本自动连接SSH
    通过自己编码VB脚本,实现连接Linuxssh。脚本内容如下:1DimWshShell2SetWshShell=WScript.CreateObject("WScript.Shell")3WshShell.Run"cmd.exe"4WScript.Slee......
  • Python多环境扩展管理
    众所周知,Python发展至今,版本众多,在使用过程中经常遇到第三方库依赖的Python版本和系统Python版本不一致的情况。同时又因系统底层需调用当前版本Python,所以不能随意变更当前......
  • Docker 安装 Python
    Docker安装PythonPython简介Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由GuidovanRossum于1989年底发明,第一个公开发行版发行于19......
  • pytorch模型onnx部署(python版本,c++版本)
    转载:实践演练BERTPytorch模型转ONNX模型及预测-知乎(zhihu.com)使用bRPC和ONNXRuntime把BERT模型服务化-知乎(zhihu.com)1.安装anaconda一般有图形界面的个人电......
  • python 排列组合器
    可以求任意类型的组合笛卡尔乘积等itertools组合生成器无限迭代器有限迭代器组合生成器生成不重复的组合foriinitertools.combinations('ABCDE',4):......
  • 说—说Python logging
    最近有个需求是把以前字符串输出的log改为json格式,看了别人的例子,还是有些比较茫然,索性就把logging整个翻了一边,做点小总结.初看log在程序中,log的用处写代码的......
  • AI:Python与人工智能相关的库/框架(机器学习&深度学习&数据科学/计算机视觉/自然语言处
    ​​Python与人工智能相关的库/框架(机器学习&深度学习&数据科学/计算机视觉/自然语言处理)的简介、案例应用​​​​1、以机器学习为主相关库​​​​2、以深度学习为主的......
  • 使用Python制作自动推送微信消息提醒的备忘录功能
    日常工作生活中,事情一多,就会忘记一些该做未做的事情。即使有时候把事情记录在了小本本上或者手机、电脑端备忘录上,也总会有查看不及时,导致错过的尴尬。如果有一款小工具,可......
  • 使用Python3+PyQT5+Pyserial实现简单的串口工具方法
    练手项目,先上图先实现一个简单的串口工具,为之后的上位机做准备代码如下:github下载地址pyserial_demo.pyimportsysimportserialimportserial.tools......
  • linux 使用 nohup 运行 python 脚本,脚本中不要有input
    如题服务器系统由windows换为linux后阿里云的个人服务器报警性能受限但是服务器上运行的程序仅有数据采集,windows服务器上运行绰绰有余按理来说linux上会更轻松才对......