CentOS Python如何进行远程管理
导读:CentOS环境下Python实现远程管理的方法 1. 准备工作:配置SSH访问 在CentOS服务器上安装并启动SSH服务,确保可以通过网络访问: sudo yum install -y openssh-server # 安装SSH服务...
CentOS环境下Python实现远程管理的方法
1. 准备工作:配置SSH访问
在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
2. 使用Paramiko实现基础远程管理
Paramiko是Python实现的SSH2协议库,支持远程命令执行、文件传输等功能。
- 建立SSH连接:
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
- 文件传输(SFTP):
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()
3. 使用Fabric简化远程操作
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()
4. 系统监控与告警
结合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"]} %, 请及时处理!')
5. 定时任务自动化
通过CentOS的crontab
设置定时任务,定期执行Python监控脚本。
- 编辑crontab:
crontab -e
- 添加定时任务(例如每5分钟执行一次监控脚本):
*/5 * * * * /usr/bin/python3 /path/to/monitor_script.py > > /var/log/monitor.log 2> & 1
6. 进阶:使用Ansible Playbook
对于复杂运维任务(如批量部署、配置管理),可通过Python调用Ansible API实现。
- 安装Ansible:
sudo yum install -y ansible
- 编写Playbook(安装Nginx):
创建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
- 通过Python执行Playbook:
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} ")
注意事项
- 安全性:避免在代码中硬编码密码,建议使用SSH密钥认证(
paramiko.RSAKey
)或环境变量存储敏感信息。 - 错误处理:添加try-except块捕获网络异常、命令执行错误,记录日志以便排查问题。
- 权限管理:确保远程用户有执行所需命令的权限(如使用
sudo
时需配置免密)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Python如何进行远程管理
本文地址: https://pptw.com/jishu/725119.html