Python+Bash开发的Xshell自动化运维脚本套件实现
·
以下是Python+Bash开发的Xshell自动化运维脚本套件,包含SSH批量操作、日志收集和性能监控功能:
remote_executor.py:
#!/usr/bin/env python3
import paramiko
from concurrent.futures import ThreadPoolExecutor
import argparse
class SSHBatchExecutor:
def __init__(self, host_file):
self.hosts = self._load_hosts(host_file)
def _load_hosts(self, path):
with open(path) as f:
return [line.strip() for line in f if not line.startswith('#')]
def execute(self, cmd, username, key_path):
with ThreadPoolExecutor(max_workers=10) as executor:
for host in self.hosts:
executor.submit(self._run_ssh, host, username, key_path, cmd)
def _run_ssh(self, host, user, key, cmd):
try:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, username=user, key_filename=key)
stdin, stdout, stderr = client.exec_command(cmd)
print(f"[{host}] OUTPUT:\n{stdout.read().decode()}")
except Exception as e:
print(f"[{host}] ERROR: {str(e)}")
finally:
client.close()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--hosts", required=True, help="Host list file")
parser.add_argument("--cmd", required=True, help="Command to execute")
parser.add_argument("--user", default="root", help="SSH username")
parser.add_argument("--key", default="~/.ssh/id_rsa", help="SSH private key path")
args = parser.parse_args()
executor = SSHBatchExecutor(args.hosts)
executor.execute(args.cmd, args.user, args.key)
log_collector.sh:
#!/bin/bash
# 多主机日志收集工具
TARGET_DIR="/var/log"
OUTPUT_DIR="./collected_logs_$(date +%Y%m%d)"
MAX_SIZE=50M # 单个日志文件最大收集大小
mkdir -p "$OUTPUT_DIR"
while read -r host; do
echo "Collecting logs from $host"
ssh "$host" "find $TARGET_DIR -type f -name '*.log' -size -$MAX_SIZE" | while read -r logfile; do
dir="${logfile%/*}"
mkdir -p "$OUTPUT_DIR/${host}${dir}"
scp "${host}:${logfile}" "$OUTPUT_DIR/${host}${dir}/"
done
done < hosts.list
tar czf collected_logs.tar.gz "$OUTPUT_DIR"
echo "Logs archived to collected_logs.tar.gz"
system_monitor.py:
#!/usr/bin/env python3
import time
import psutil
from datetime import datetime
def monitor_system(interval=5, duration=3600):
log_file = f"system_stats_{datetime.now().strftime('%Y%m%d')}.csv"
with open(log_file, 'a') as f:
f.write("timestamp,cpu%,mem%,disk%,net_sent(MB),net_recv(MB)\n")
end_time = time.time() + duration
while time.time() < end_time:
timestamp = datetime.now().isoformat()
cpu = psutil.cpu_percent()
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
net = psutil.net_io_counters()
stats = f"{timestamp},{cpu},{mem},{disk}," \
f"{net.bytes_sent/1e6:.2f},{net.bytes_recv/1e6:.2f}\n"
f.write(stats)
f.flush()
time.sleep(interval)
if __name__ == "__main__":
monitor_system()
requirements.txt:
paramiko>=3.0.0
psutil>=5.8.0
concurrent-log-handler>=0.9.20
说明:
- remote_executor.py实现多线程SSH批量命令执行,支持主机列表文件和密钥认证
- log_collector.sh提供分布式日志收集功能,自动打包压缩采集结果
- system_monitor.py持续记录CPU/内存/磁盘/网络指标并生成CSV报告
- 所有脚本均支持通过命令行参数配置运行参数
- 采用线程池优化SSH并发性能,内置完善的错误处理机制
使用流程:
- 准备hosts.list文件列出目标服务器IP
- 安装依赖:pip install -r requirements.txt
- 批量执行命令:python remote_executor.py --hosts hosts.list --cmd “df -h”
- 收集日志:./log_collector.sh
- 监控性能:nohup python system_monitor.py &
更多推荐
所有评论(0)