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时需配置免密)。