欢迎光临
我们一直在努力

多服务器批量自动化配置脚本

多服务器批量自动化配置脚本:从 0 到 1 实现 Linux 运维效率提升

在日常 Linux 运维工作中,你是否遇到过这些痛点?新上线 10 台服务器,需要逐台登录关闭防火墙、创建用户、安装工具;重复操作耗时且容易出错;操作记录分散,出问题后难以追溯。今天,我们将通过一份基于 Python 的多服务器批量自动化配置脚本,彻底解决这些问题,让运维工作效率提升 10 倍。

一、脚本核心功能与适用场景

在深入代码前,先明确脚本的定位:这是一款针对 Linux 服务器(以 openEuler 为例)的初始化配置自动化工具,支持多服务器并发处理,核心功能包括:

  • 批量 SSH 连接目标服务器(无需手动输入密码)
  • 统一执行基础配置:永久关闭防火墙
  • 标准化用户管理:创建管理员用户(带 sudo 权限)和普通用户
  • 批量安装运维高频工具(26 个,覆盖文件传输、网络监控、文本处理等场景)
  • 详细日志记录:每台服务器操作日志独立保存,支持问题追溯

适用场景:

  • 新服务器集群初始化(10 台 + 效率优势明显)
  • 跨部门服务器标准化配置(避免 “各台服务器环境不一致” 问题)
  • 运维操作自动化(减少人工干预,降低操作风险)

二、脚本依赖与环境准备

在使用脚本前,需完成以下准备工作,确保环境兼容性:

1. 依赖库安装

脚本基于paramiko实现 SSH 连接,需先安装该库:

bash

# 安装paramiko(支持Python 3.6+)
pip install paramiko

2. 目标服务器要求

  • 操作系统:openEuler/CentOS/RHEL(基于 dnf/yum 包管理器,其他发行版需修改包管理命令)
  • SSH 服务:已开启(默认 22 端口,可在脚本中修改端口)
  • 登录权限:拥有 root 账号及密码(脚本初始用 root 登录,后续可切换到管理员用户)
  • 网络连通性:执行脚本的机器能 ping 通目标服务器,且 22 端口未被防火墙拦截

三、脚本核心模块解析(从配置到执行)

脚本采用模块化设计,每个模块职责清晰,便于维护和扩展。我们按 “配置→连接→任务→并发” 的流程,逐一拆解核心模块。

模块 1:基础配置(可直接修改的参数中心)

这部分是脚本的 “控制面板”,所有可定制化的参数都集中在这里,无需修改后续代码即可适配不同场景:

python

# ————————– 基础配置 ————————–
# 1. SSH连接信息(必填)
SSH_USER = \”root\” # 登录用户名(默认root)
SSH_PASS = \”Admin@2025\” # 登录密码(需替换为实际密码)
BASE_IP = \”88.88.88.\” # IP前缀(如目标IP是192.168.1.2-10,这里填\”192.168.1.\”)
IP_RANGE = range(2, 5) # IP后缀范围(生成88.88.88.2-4,左闭右开)
MAX_CONCURRENT = 10 # 最大并发数(根据服务器性能和网络调整,建议10-20)

# 2. 待安装工具包(按类别分组,可增删)
TOOL_PACKAGES = {
\”文件与传输\”: [\”wget\”, \”curl\”, \”lrzsz\”, \”unzip\”, \”p7zip\”, \”tar\”],
\”网络工具\”: [\”net-tools\”, \”tcpdump\”, \”traceroute\”, \”mtr\”, \”nmap\”, \”bind-utils\”, \”telnet\”, \”nc\”],
\”文本编辑与处理\”: [\”vim-enhanced\”, \”grep\”, \”sed\”, \”gawk\”, \”diffutils\”, \”patch\”, \”dos2unix\”],
\”系统监控与调试\”: [\”htop\”, \”iotop\”, \”sysstat\”, \”strace\”, \”ltrace\”]
}
# 扁平化工具包列表(用于批量安装)
ALL_PACKAGES = [pkg for category in TOOL_PACKAGES.values() for pkg in category]

配置修改建议:

  • 首次使用时,优先修改SSH_USER、SSH_PASS、BASE_IP和IP_RANGE,确保能连接到目标服务器;
  • 工具包可根据需求增删,例如需要 Docker 可添加\”docker-ce\”(需提前配置 Docker 仓库);
  • 并发数MAX_CONCURRENT:若目标服务器数量少(<10),可设为 5-10;若数量多(>50),建议设为 15-20,避免网络拥堵。

模块 2:日志系统(操作可追溯的关键)

运维脚本的核心需求之一是 “可追溯”—— 出问题时能快速定位原因。脚本通过setup_logging函数实现了按服务器 IP + 时间戳生成独立日志文件,同时在控制台实时输出进度:

python

def setup_logging(script_dir, ip):
# 1. 创建日志目录(与脚本同层级的execution_logs文件夹)
log_dir = os.path.join(script_dir, \”execution_logs\”)
os.makedirs(log_dir, exist_ok=True) # 目录不存在则创建,存在则跳过

# 2. 日志文件名格式:IP_年月日_时分秒.log(如88.88.88.2_20240520_143025.log)
log_filename = f\”{ip}_{datetime.now().strftime(\’%Y%m%d_%H%M%S\’)}.log\”
log_path = os.path.join(log_dir, log_filename)

# 3. 配置日志器(避免多线程日志混乱)
logger = logging.getLogger(f\”server_{ip}\”) # 为每个服务器创建独立日志器
logger.setLevel(logging.INFO)
logger.propagate = False # 禁止日志向上传递(避免重复输出)

# 4. 配置文件日志(详细格式:时间戳+日志级别+内容)
file_handler = logging.FileHandler(log_path, encoding=\”utf-8\”)
file_handler.setFormatter(logging.Formatter(\”[%(asctime)s] [%(levelname)s] %(message)s\”))

# 5. 配置控制台日志(简洁格式:仅内容)
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter(\”%(message)s\”))

# 6. 添加处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)

return logger, log_dir

日志优势:

  • 独立性:每台服务器的日志单独保存,不会相互干扰;
  • 完整性:记录所有操作(连接、命令执行、结果),包括成功和失败信息;
  • 易查找:文件名包含 IP 和时间,可快速定位某台服务器某时间的操作记录。

模块 3:SSH 客户端(与服务器交互的桥梁)

赞(0)
未经允许不得转载:171主机测评 » 多服务器批量自动化配置脚本
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址