发布于2026-07-15 阅读(0)
扫一扫,手机访问
在日常运维中,远程控制服务器是基本功,而Python恰好是完成这类任务的利器。尤其当你的环境是CentOS时,配合几个成熟的库,几乎可以把一切手动操作都脚本化。这篇文章会从最基础的SSH配置讲起,逐步深入到Paramiko、Fabric,再到监控告警和定时任务——一层层铺开,希望能帮你理清整个技术栈的脉络。
在动手写Python脚本之前,得先确保服务器上的SSH服务是开启的。默认端口是22,但生产环境建议改掉——不过这里我们先按标准流程走。

sudo yum install -y openssh-serversudo systemctl start sshd
sudo systemctl enable sshdsudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload做完这些,你可以在本地机器上用 ssh username@your_server_ip 测试一下连通性,确保一切正常后再往下走。
Paramiko是Python世界里最经典的SSH2协议库,没有之一。它支持远程命令执行、文件传输,甚至还能做端口转发,属于“小而强”的典范。
pip install paramikols -l 命令并打印结果。注意,这里为了演示方便用了密码认证,但生产环境建议换成密钥,后面会提到。import paramiko
def run_remote_command(hostname, port, username, password, command):
# 创建SSH客户端实例
client = paramiko.SSHClient()
# 允许连接未信任的主机(生产环境建议使用密钥认证)
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
# 连接远程服务器
client.connect(hostname=hostname, port=port, username=username, password=password)
# 执行命令
stdin, stdout, stderr = client.exec_command(command)
# 输出命令结果(解码为UTF-8)
print(stdout.read().decode('utf-8'))
except Exception as e:
print(f"连接或执行命令出错: {e}")
finally:
# 关闭连接
client.close()
# 使用示例(替换为实际信息)
if __name__ == "__main__":
run_remote_command(
hostname="your_server_ip",
port=22,
username="your_username",
password="your_password",
command="ls -l /tmp"
)
import paramiko
def transfer_file(hostname, port, username, password, local_path, remote_path, direction="upload"):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect(hostname, port, username, password)
sftp = client.open_sftp()
if direction == "upload":
sftp.put(local_path, remote_path) # 上传本地文件到远程
print(f"文件 {local_path} 上传至 {remote_path} 成功")
else:
sftp.get(remote_path, local_path) # 下载远程文件到本地
print(f"文件 {remote_path} 下载至 {local_path} 成功")
sftp.close()
except Exception as e:
print(f"文件传输出错: {e}")
finally:
client.close()
# 使用示例(上传本地文件到远程/tmp目录)
transfer_file(
hostname="your_server_ip",
port=22,
username="your_username",
password="your_password",
local_path="local_file.txt",
remote_path="/tmp/remote_file.txt",
direction="upload"
)
安全性提示:生产环境中强烈建议使用SSH密钥认证(paramiko.RSAKey.from_private_key_file)替代密码,避免密码泄露风险。这个细节值得留意。
如果你觉得Paramiko的写法还是有点啰嗦,那Fabric就是它的“语法糖”版本。Fabric基于Paramiko,但提供了更简洁的API,特别适合批量执行远程命令、文件传输等任务。
pip install fabricfrom fabric import Connection
def deploy_code():
# 创建连接(替换为实际信息)
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 myapp")
print("部署完成!")
except Exception as e:
print(f"部署出错: {e}")
finally:
conn.close()
if __name__ == "__main__":
deploy_code()
Fabric的 Connection 对象封装了SSH连接逻辑,run 方法执行远程命令,cd 方法切换目录,代码可读性和可维护性都上了一个台阶。
远程控制只是自动化运维的起点,真正让系统“自运转”还需要监控、告警和定时任务。下面几个方向可以无缝衔接。
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
print(f"CPU使用率: {cpu_usage}%, 内存使用率: {memory_usage}%, 磁盘使用率: {disk_usage}%")
return cpu_usage > 80 or memory_usage > 80 or disk_usage > 80
if check_system_status():
print("警告:系统资源使用率过高!")
smtplib 库发送邮件通知。import smtplib
from email.mime.text import MIMEText
def send_alert(subject, body, to_email):
from_email = "your_email@example.com"
password = "your_email_password"
smtp_server = "smtp.example.com" # 如QQ邮箱的smtp.qq.com
msg = MIMEText(body)
msg["Subject"] = subject
msg["From"] = from_email
msg["To"] = to_email
try:
with smtplib.SMTP(smtp_server, 587) as server:
server.starttls()
server.login(from_email, password)
server.sendmail(from_email, [to_email], msg.as_string())
print("告警邮件发送成功!")
except Exception as e:
print(f"邮件发送失败: {e}")
# 使用示例
if check_system_status():
send_alert("服务器资源告警", "CPU或内存使用率超过80%", "admin@example.com")
crontab 设置定时任务,定期运行Python脚本。编辑当前用户的crontab:crontab -e添加以下内容(每小时执行一次 /path/to/script.py):0 * * * * /usr/bin/python3 /path/to/script.py >> /var/log/python_script.log 2>&1以上方法基本覆盖了CentOS环境下Python远程控制的核心需求。从最基础的SSH配置,到Paramiko和Fabric的实操,再到监控告警和定时任务的联动,你可以根据实际场景选择合适的工具组合。关键是,把这些步骤串起来,形成一个可复用的自动化闭环,这才是真正的价值所在。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8