【Python】python脚本远程连接 linux, windows

1. 连接 linux

import paramiko  # pip install paramiko


def main(ip, port, username, password):
    res_data = []

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(ip, port, username, password)

    shell_in = "df -Tk"
    # 执行多条命令直接在exec_command()使用;分隔即可。
    stdin, stdout, stderr = ssh.exec_command(shell_in)

    # 循环打印每一行输出
    if stdout:
        data = stdout.readlines()
        for line_num, line in enumerate(data):
            # print(line, end='')
            if line_num > 0:
                temp = line.rstrip('\n').split()
                if temp[1] in ['ext4']:  # 文件系统类型
                    res_data.append({
                        'file_system': temp[0],  # 文件系统
                        'file_system_type': temp[1],  # 文件系统类型
                        'total_size': round(int(temp[2])/1024/1024, 2),  # 容量
                        'used_size': round(int(temp[3])/1024/1024, 2),  # 已用
                        'available_size': round(int(temp[4])/1024/1024, 2),  # 可用
                        'used_percent': temp[5],  # 已用%
                        'mount_point': temp[6]  # 挂载点
                    })
    if stderr:
        data = stdout.readlines()
        if data:
            ssh.close()
            raise ValueError

    ssh.close()
    return res_data

2. 连接 windows

import winrm  # pip install pywinrm

"""
wmic LogicalDisk get Caption,Description,FileSystem,FreeSpace,Size
Caption  Description   FileSystem  FreeSpace    Size
C:       本地固定磁盘  NTFS        8858968064   157286395904
D:       本地固定磁盘  NTFS        65570955264  209714147328
E:       本地固定磁盘  NTFS        39923621888  144040783872
"""


def main(ip, port, username, password):
    res_data = []
    shell_in = 'wmic LogicalDisk get Description,FileSystem,FreeSpace,Name,Size'
    win = winrm.Session(ip, auth=(username, password), transport='ntlm')
    data = win.run_ps(shell_in)
    if data.status_code == 0:
        std_out = str(data.std_out, 'gbk')  # 打印获取到的信息, cmd默认使用gbk编码,而python默认使用utf-8,所以要用gbk进行解码
        if std_out:
            for line_num, data in enumerate(std_out.split('\n')):
                if line_num > 0:
                    temp = data.rstrip('\r').split()
                    if temp:
                        res_data.append({
                            'name': temp[3],  # 磁盘名称
                            'description': temp[0],  # 描述
                            'file_system': temp[1],  # 文件系统
                            'available_size': round(int(temp[2]) / 1024 / 1024 / 1024, 2),  # 可用
                            'total_size': round(int(temp[4]) / 1024 / 1024 / 1024, 2),  # 总容量
                            'used_size': round((int(temp[4]) - int(temp[2])) / 1024 / 1024 / 1024, 2),  # 已用
                            'used_percent': str(100 - round(int(temp[2]) / int(temp[4]) * 100, 2)) + '%',  # 已用%
                        })

        return res_data
    else:
        raise ValueError(data.status_code)

posted @   是阿杰呀  阅读(420)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示