美文网首页
通过python批量修改服务器系统日志发送地址

通过python批量修改服务器系统日志发送地址

作者: ArthurIsUsed | 来源:发表于2020-09-21 15:06 被阅读0次

问题

近期迁移服务器,拿到40台虚拟机后,安全团队反馈采用就的模板,目前需要把系统日志发送到其他设备上。确认后需要修改的文件/etc/rsyslog.conf

思路

  • 该服务器可以免密登录到其他40台设备,可以采用paramiko模块远程执行ssh命令,即sed修改文件命令。
[root@console home]# cat test_sed.txt 
hello
192.168.120.163
world
192.168.132.155
hello 酷狗

[root@console home]# 
[root@console home]# sed -i 's/192.168.120.163/10.6.6.112/g' test_sed.txt 
[root@console home]# cat test_sed.txt 
hello
10.6.6.112
world
192.168.132.155
hello 酷狗
  • 获取HostName字段的函数,
    ◇: 函数名:host_name()
    ◇:实参:ssh目录下的config
    ◇:处理后的值: 远端服务器的IP,数据类型是元素为字符串的列表
  • 用于ssh连接的函数
    ◇:函数名:ssh_remote();
    ◇:实参: sed命令
    ◇:返回值:布尔值
  • 循环遍历host_ip,依次调用ssh_remote函数,执行sed命令

执行

执行后发现有两个IP错误,其他的成功, 原因是其中一个没做免密登录,另一个authorized_keys文件名称少了一个s

[root@tempcentos7 ~]# tail -n 3 /etc/rsyslog.conf 
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @10.6.6.112:514
# ### end of the forwarding rule ###


10.6.9.226 执行成功
10.6.9.227 Error
10.6.9.228 执行成功
10.6.9.229 执行成功
10.6.9.230 Error
10.6.9.231 执行成功

代码

#!/usr/bin/env python3
#-*-coding: utf-8 -*-
import paramiko


config_file = "/root/.ssh/config"
sed_command = "sed -i 's/192.168.120.163/10.6.6.112/g' /etc/rsyslog.conf"
restart_rsyslog = 'systemctl restart rsyslog'
host_ip = []
key_file = '/root/.ssh/id_rsa'


def ssh_remote(host_ip, command):
    # 实例化SSH客户端
    ssh_remote = paramiko.SSHClient()
    # 设置白名单
    policy = paramiko.AutoAddPolicy()
    ssh_remote.set_missing_host_key_policy(policy)
    key = paramiko.RSAKey.from_private_key_file(key_file)
    try:
        ssh_remote.connect(
            hostname = host_ip,
            port = 36622,
            username = 'root',
            pkey = key
        )
        # 执行sed命令
        stdin, stdout, stderr = ssh_remote.exec_command(command)
        if stdout.read():
            print('{} 执行失败'.format(host_ip))
        else:
            print('{} 执行成功'.format(host_ip))
    except:
        print('{} Error'.format(host_ip))
        

# 读取ssh目录下的config文件,获取HostName字段
# 获取的IP,以字符串的形式保存到host_ip列表中
def host_name(file_path):
    with open(config_file, 'r') as cf:
        for lines in cf.readlines():
            if "HostName" in lines:
                host_ip.append(lines.split(' ')[1].strip('\n'))
    return host_ip
        


def connect_remote(ssh_remote, host_ip):
    # 依次连接到远端服务器, 修改配置
    for host_ip in host_ip:
        ssh_remote(host_ip, sed_command)
    for host_ip in host_ip:
        ssh_remote(host_ip, restart_rsyslog)

if __name__ == "__main__":
    host_ip = host_name(config_file)
    connect_remote(ssh_remote, host_ip)

相关文章

  • 通过python批量修改服务器系统日志发送地址

    问题 近期迁移服务器,拿到40台虚拟机后,安全团队反馈采用就的模板,目前需要把系统日志发送到其他设备上。确认后需要...

  • Python入门系列--邮件--day02

    参考地址: Python发送邮件给多人 Python邮件功能 - 使用163邮箱SMTP服务器发送邮件

  • 005.ELK收集Nginx日志

    1. ELK收集Nginx普通格式的日志 1.1 测试服务器架构 1.2 ab工具使用 ab工具用于批量发送HTT...

  • 利用expect批量修改Linux服务器密码

    利用expect批量修改Linux服务器密码 背景 修改Linux系统密码,执行passwd即可更改密码。可如果有...

  • python 批量修改文件名

    python 批量修改文件名

  • 大数据学习之:Flume

    flume作用 从磁盘采集文件发送到HDFS 数据采集来源:系统日志文件、Python爬虫数据、端口数据 数据发送...

  • 2018-08-28

    爬虫的基本流程 一、发送HTTP请求(Request)通过Python库向目标站点发送HTTP请求,等待服务器响应...

  • elk初认识  ---开始你的探索

    日志详解 1)日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检...

  • ELK入门

    一、概述 日志有什么用?日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬...

  • ELK 6.2.4日志平台搭建

    背景 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置...

网友评论

      本文标题:通过python批量修改服务器系统日志发送地址

      本文链接:https://www.haomeiwen.com/subject/jxhvyktx.html