CentOS环境下Python实现远程管理的方法
在CentOS服务器上安装并启动SSH服务,确保可以通过网络访问:
sudo yum install -y openssh-server # 安装SSH服务器 sudo systemctl start sshd # 启动SSH服务 sudo systemctl enable sshd # 设置开机自启 sudo firewall-cmd --permanent --add-service=ssh # 允许SSH通过防火墙(firewalld) sudo firewall-cmd --reload # 重新加载防火墙规则
本地机器需安装Python及常用库(paramiko、fabric、psutil等):
pip3 install paramiko fabric psutil
Paramiko是Python实现的SSH2协议库,支持远程命令执行、文件传输等功能。
import paramiko def create_ssh_connection(hostname, port, username, password): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加主机密钥(生产环境建议使用known_hosts) ssh.connect(hostname=hostname, port=port, username=username, password=password) return ssh
def run_remote_command(ssh, command): stdin, stdout, stderr = ssh.exec_command(command) output = stdout.read().decode('utf-8') error = stderr.read().decode('utf-8') if error: print(f"命令执行错误: {error}") return output
def transfer_file(ssh, local_path, remote_path, direction='put'): sftp = ssh.open_sftp() if direction == 'put': sftp.put(local_path, remote_path) else: sftp.get(remote_path, local_path) sftp.close()
def close_ssh(ssh): ssh.close()
Fabric是基于Paramiko的高级库,提供更简洁的语法实现批量远程任务(如部署、维护)。
pip3 install fabric
from fabric import Connection def deploy_app(): # 连接远程服务器(替换为实际信息) conn = Connection( host='your_server_ip', user='your_username', connect_kwargs={'password': 'your_password'} ) try: # 切换到项目目录 with conn.cd('/var/www/myapp'): # 拉取最新代码 conn.run('git pull origin main') # 安装依赖 conn.run('pip install -r requirements.txt') # 重启服务 conn.run('systemctl restart gunicorn') print("部署成功!") finally: conn.close()
结合psutil
库获取系统状态(CPU、内存、磁盘),并通过邮件发送告警。
import psutil def check_system_status(): cpu_usage = psutil.cpu_percent(interval=1) memory_usage = psutil.virtual_memory().percent disk_usage = psutil.disk_usage('/').percent return { 'cpu': cpu_usage, 'memory': memory_usage, 'disk': disk_usage }
import smtplib from email.mime.text import MIMEText def send_alert(subject, message): sender = 'your_email@example.com' receiver = 'admin@example.com' smtp_server = 'smtp.example.com' smtp_port = 587 password = 'your_email_password' msg = MIMEText(message) msg['Subject'] = subject msg['From'] = sender msg['To'] = receiver with smtplib.SMTP(smtp_server, smtp_port) as server: server.starttls() server.login(sender, password) server.sendmail(sender, [receiver], msg.as_string())
def monitor_and_alert(): status = check_system_status() if status['cpu'] > 80: send_alert('CPU使用率过高', f'当前CPU使用率: {status["cpu"]}%, 请及时处理!') if status['memory'] > 85: send_alert('内存使用率过高', f'当前内存使用率: {status["memory"]}%, 请及时处理!')
通过CentOS的crontab
设置定时任务,定期执行Python监控脚本。
crontab -e
*/5 * * * * /usr/bin/python3 /path/to/monitor_script.py >> /var/log/monitor.log 2>&1
对于复杂运维任务(如批量部署、配置管理),可通过Python调用Ansible API实现。
sudo yum install -y ansible
nginx.yml
文件:--- - name: Install and start Nginx hosts: webservers # 需在inventory文件中定义 become: yes tasks: - name: Update apt cache apt: update_cache=yes - name: Install Nginx apt: name=nginx state=present - name: Start Nginx service service: name=nginx state=started enabled=yes
import ansible_runner def run_ansible_playbook(playbook_path, inventory_path): result = ansible_runner.run( private_data_dir='.', playbook=playbook_path, inventory=inventory_path ) if result.rc == 0: print("Playbook执行成功!") else: print(f"Playbook执行失败,返回码: {result.rc}")
paramiko.RSAKey
)或环境变量存储敏感信息。sudo
时需配置免密)。