收藏文章 楼主

python远程操作centos的一些函数

版块:python3 脚本程序   类型:普通   作者:小绿叶技术博客   查看:2045   回复:0   获赞:0   时间:2020-09-04 11:03:00

#!/usr/bin/python

# -*- coding: UTF-8 -*-

import paramiko

import re



# 远程操作命令行

def rcmd(command=None, host=None, passwd=None, user=None, port=22, save_path="C:/rcmd_error.txt"):

    try:

        ssh = paramiko.SSHClient()

        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

        ssh.connect(hostname=host, username=user, password=passwd, port=port)

        try:

            _stdin, _stdout, _stderr = ssh.exec_command(command)

            bash_out = _stdout.readlines()

            bash_err = _stderr.read()

            if bash_err:

                save_err = '[%s] bash input: %s, ERROR:\n%s' % (host, command, bash_err) + "\n"

                with open(save_path, "a+") as f:

                    f.write(save_err)

                return False

            if bash_out:

                return bash_out

        except Exception as ssh_err:

            save_err = '[%s] bash ERROR:\n%s' % (host, ssh_err) + "\n"

            with open(save_path, "a+") as f:

                f.write(save_err)

            return False

        finally:

            ssh.close()

    except Exception as ssh_err:

        save_err = '[%s] bash ERROR:\n%s' % (host, ssh_err) + "\n"

        with open(save_path, "a+") as f:

            f.write(save_err)

        return False



# 获取主从关系

def get_cluster_role(host=None, passwd=None, user='root', port=22):

    cluster_role = -1

    cmd_result = rcmd(command='ip a | grep \"inet \"', host=host, passwd=passwd, user=user, port=port)

    if cmd_result:

        cluster_role = "从"

        for _ip in cmd_result:

            if host[:6] in _ip and host not in _ip:

                cluster_role = "主"

        return cluster_role

    else:

        return cluster_role



# 获取sip

def get_sip(host=None, passwd=None, user='root', port=22):

    sip = -1

    cmd_result = rcmd(command='ip a | grep \"inet \"', host=host, passwd=passwd, user=user, port=port)

    if cmd_result:

        sip = ""

        for _ip in cmd_result:

            if host[:6] in _ip and host not in _ip:

                sip = re.split(" |/", _ip.strip())[1]

        return sip

    else:

        return sip



# 获取内网ip

def get_internal_sip(host=None, passwd=None, user='root', port=22):

    internal_ip = -1

    cmd_result = rcmd(command='ip a | grep \"inet \"', host=host, passwd=passwd, user=user, port=port)

    if cmd_result:

        internal_ip = ""

        ip_to_remove = []

        for _ip in cmd_result:

            if host[:6] in _ip and host not in _ip:

                ip_to_remove.append(_ip)

                continue

            if host in _ip:

                ip_to_remove.append(_ip)

                continue

            if ("127.0.0.1" in _ip) or ("192.168.122.1" in _ip):

                ip_to_remove.append(_ip)

                continue

        _all_ip = [item for item in cmd_result if item not in set(ip_to_remove)]

        if len(_all_ip) > 0:

            for _ip in _all_ip:

                internal_ip += re.split(" |/", _ip.strip())[1] + "; "

        return internal_ip

    else:

        return internal_ip



# 启动防火墙

def start_firewall(host=None, passwd=None, user='root', port=22):

    cmd_result = rcmd(command='systemctl start firewalld', host=host, passwd=passwd, user=user, port=port)

    return cmd_result



# 获取防火墙端口

def get_firewall_ports(host=None, passwd=None, user='root', port=22):

    firewall_ports = -1

    cmd_result = rcmd(command='firewall-cmd --list-ports', host=host, passwd=passwd, user=user, port=port)

    if cmd_result:

        firewall_ports = cmd_result[0][:-1]

        return firewall_ports

    else:

        return firewall_ports



# 获取硬盘使用空间

def get_total_disk(host=None, passwd=None, user='root', port=22):

    total_disk = -1

    cmd_result = rcmd(command='df', host=host, passwd=passwd, user=user, port=port)

    if cmd_result:

        disk_out = cmd_result[1:]

        total_disk = 0

        for d in disk_out:

            total_disk += int(d.split()[1])

        total_disk = round(total_disk / 1024 / 1024 / 1024, 1)

        return total_disk

    else:

        return total_disk



# 获取磁盘已使用空间

def get_used_disk(host=None, passwd=None, user='root', port=22):

    used_disk = -1

    cmd_result = rcmd(command='df', host=host, passwd=passwd, user=user, port=port)

    if cmd_result:

        used_disk = 0

        disk_out = cmd_result[1:]

        for d in disk_out:

            used_disk += int(d.split()[2])

        used_disk = round(used_disk / 1024 / 1024 / 1024, 3)

        return used_disk

    else:

        return used_disk



# 获取总内存

def get_total_mem(host=None, passwd=None, user='root', port=22):

    total_mem = -1

    cmd_result = rcmd(command='free', host=host, passwd=passwd, user=user, port=port)

    if cmd_result:

        mem_out = cmd_result[1]

        total_mem = int(mem_out.split()[1])

        total_mem = round(total_mem / 1024 / 1024)

        return total_mem

    else:

        return total_mem



# 获取已使用内存

def get_used_mem(host=None, passwd=None, user='root', port=22):

    used_mem = -1

    cmd_result = rcmd(command='free', host=host, passwd=passwd, user=user, port=port)

    if cmd_result:

        mem_out = cmd_result[1]

        used_mem = int(mem_out.split()[2])

        used_mem = round(used_mem / 1024 / 1024, 1)

        return used_mem

    else:

        return used_mem

提供企业建站服务,免费网防系统,提交信息登录 http://yundun.ddoss.cn 邮箱: proposal@ddoss.cn 
回复列表
默认   热门   正序   倒序

回复:python远程操作centos的一些函数

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息