首页 > 编程语言 >【Python小随笔】 SSH 获取信息

【Python小随笔】 SSH 获取信息

时间:2024-03-23 12:55:21浏览次数:24  
标签:info 获取信息 stdout Python client SSH dists disk ssh

import paramiko



# 获取信息
def check_msg(hostname,username,password):
    # 创建 SSH 客户端实例
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname, 22, username, password)
    dists = {}
    # HOSTNAME
    stdin, stdout, stderr = ssh_client.exec_command('hostname')
    hostname = stdout.read().decode("utf-8").replace("\n","")
    dists['Hostname'] = hostname
    # CPU
    stdin, stdout, stderr = ssh_client.exec_command('lscpu')
    output = stdout.read().decode()
    cpu_info = {}
    for line in output.split('\n'):
        if ':' in line:
            key, value = line.split(':', 1)
            cpu_info[key.strip()] = value.strip()
    dists['CPU'] = cpu_info.get("Model name", "N/A")
    dists['JiaGou'] = cpu_info.get("Architecture", "N/A")
    dists['CPUS'] = cpu_info.get("CPU(s)", "N/A")
    stdin, stdout, stderr = ssh_client.exec_command('top -bn1 | grep "Cpu(s)"')
    output = stdout.read().decode()
    cpu_usage = output.split('Cpu(s):', 1)[1].strip().split(',')
    for item in cpu_usage:
        if 'id' in item:
            idle_percentage = item.split()[0]
    cpu_use = round(100 - float(idle_percentage),2)
    dists['CPUuse'] = str(cpu_use) + "%"
    # 内存
    stdin, stdout, stderr = ssh_client.exec_command('free -m')
    output = stdout.read().decode("utf-8").split('\n')
    for line in output:
        if line.startswith('Mem:'):
            # 分割每行并提取关键信息
            parts = line.split()
            total_memory = int(parts[1])
            used_memory = int(parts[2])
            free_memory = int(parts[3])
            dists['TotalMemory'] = str(total_memory) + " MB"
            dists['UsedMemory'] = str(used_memory) + " MB"
            dists['FreeMemory'] = str(free_memory) + " MB"
    # 硬盘
    stdin, stdout, stderr = ssh_client.exec_command('df -h')
    output = stdout.read().decode("utf-8").split('\n')
    disk_space_info = []
    for line in output:
        if line.startswith('/'):
            disk_info = line.split()
            filesystem = disk_info[0]
            size = disk_info[1]
            used = disk_info[2]
            available = disk_info[3]
            use_percentage = disk_info[4]
            mount_point = disk_info[5]
            disk_space_info.append({
                'filesystem': filesystem,
                'size': size,
                'used': used,
                'available': available,
                'use_percentage': use_percentage,
                'mount_point': mount_point
            })
    # dists['FreeDisk']
    yingpan = ""
    count = 0
    for disk in disk_space_info:
        count = count + 1
        yingpan = yingpan +  f"  第{count}块硬盘信息:总大小:{disk['size']},已使用:{disk['used']},使用占比:{disk['use_percentage']}"
    dists['Disk'] = yingpan
    # 关闭 SSH 连接
    ssh_client.close()
    return dists


# 传送文件
def send(hostname,username,password,local_path,remote_path):
    """
    :param local_path:
    :param remote_path:
    :return:
    """
    try:
        # 建立 SSH 连接
        ssh_client = paramiko.SSHClient()
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_client.connect(hostname, 22, username, password)
        sftp = ssh_client.open_sftp()
        sftp.put(local_path, remote_path)
        # 关闭 SFTP 客户端和 SSH 连接
        sftp.close()
        ssh_client.close()
        return 1
    except:
        return 0


if __name__ == '__main__':
    # 设置 SSH 连接参数
    hostname = '192.168.88.101'
    username = 'root'
    password = '123456'


    send(hostname, username, password,r'C:\Users\17750\Desktop\TEST.txt',"/home/TEST.txt")

标签:info,获取信息,stdout,Python,client,SSH,dists,disk,ssh
From: https://www.cnblogs.com/wanghong1994/p/18090992

相关文章

  • 【华为OD】2024年C卷真题集:最新的真题集题库 C/C++/Java/python/JavaScript
    2024年C卷真题题集题库,有2种分数的题目列表,分别是100分的列表、200分的列表需要订阅请看链接:C卷100分真题集质量分:94价格:39.9元C卷200分真题集质量分:94价格:99.9元从2023年11月开始,华为OD题目切换到C卷,基本上大概率会使用半年左右,要在2024年5月之前把这些题目都好好练习一下......
  • 第十四届蓝桥杯大赛软件赛省赛Python 《01串的熵》
    问题描述问题类型暴力,枚举、问题分析由例题知对于一个长度为L的01串,设0出现的次数为x,则1出现的次数为L-x,其信息熵整理后可表示为:基于此,我们可以给出当长度L=23333333的01串,其信息熵为11625907.5798时,该字符串中0和1的个数分别为多少。题目限制0出现的次数比1少,可以通过......
  • 实现通过 Python 检查服务器的 443 端口是否接通
    实现通过Python检查服务器的443端口是否接通importsocketdefcheck_port(host,port):try:#创建socket对象s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置连接超时时间为3秒s.settimeout(3)#连接......
  • 9.python if 语句
    9.pythonif语句一般什么场景需要进行条件判断?用户权限判断:根据用户的权限级别来确定是否允许访问特定的功能或资源。表单验证:根据用户输入的信息验证表单的有效性,例如检查电子邮件地址是否合法、密码是否符合要求等。游戏逻辑:在游戏开发中,可能需要根据玩家的得分......
  • 网络工程师的Python之路-网络运维自动化实战-1.2
    1.2.2脚本模式在Windows里,有两种方法创建Python脚本,一种是将代码写进Windows记事本里,另一种是借助第三方编辑器。两种方法分别介绍如下。1.使用记事本创建Python脚本在桌面上新建一个记事本文件,将代码print('hello,world!')写入,如下图所示。然后将其另存为.p......
  • (Python)知识点——数组篇
    在连续的内存空间中,存储一组相同类型的元素元素:值索引:数组的下标数组访问(Access)和数组搜索(Search)●数组访问:索引●数组搜索:找2这个元素数组中有没有常规操作数组的代码如下:#-*-coding:utf-8-*-#@Time:2024-03-2022:14#@Author:Lindand#@Fil......
  • 【Python】Python 学习路线以及资料分享
    想学习Python,我正好也是从小白过来的,能给你提点建议,书籍其实我觉得没有必要,如果需要的话,随便买一本都行,同质化太严重了。我觉得分为三个阶段:1.学习基础知识。2.做练习。3.找寻适合自己的方向,深入学习。一、学习基础知识两个网站,菜鸟教程和廖雪峰博客。一个课程,北京......
  • 不想“自费打工”,那就学习Python做些副业试试!
    当代年轻人打工的第一目标是什么?就是:搞钱!搞钱!搞钱!但赚钱谈何容易,很多人基本上工作只有一点“死”工资,每月再扣除房租水电、花呗信用卡的钱,能用的钱真的不多了,更别提去提高生活质量了。不少人甚至自嘲自己是“自费打工”:所以,副业也就成了职场人最感兴趣的话题之一。在知......
  • 基础篇--Python重要知识点总结
    Python语言不同于Java和C,它属于高层次的脚本语言,简单易学。但是如果你去找python教程,那真的是要好好啃很久,但是其实最常用的和最重点的东西没有那么多,最近看了北大的一个老师讲的课程进行了以一些总结,手动Run一Run以下知识点,基本上就可以上手撕数据分析或者人工智能相关的编......
  • 如何系统得自学python?——7.列表与元组
    列表一、列表的应⽤场景列表是Python中最常用的数据结构之一,用于存储一组有序的数据。它在各种场景中都有广泛的应用,例如:存储多个相同类型的数据,如学生成绩、员工工资等。存储不同类型的数据,如图书信息(包含书名、作者、出版社等)。在算法中作为临时存储数据的容器,如排序算法......