Python 脚本入门:用 paramiko 批量管理服务器的 3 个实用场景

举报
yd_221024848 发表于 2026/10/29 01:13:53 2026/10/29
【摘要】 paramiko 是 Python 里最常用的 SSH 库。本文分享 3 个批量管理服务器的实用场景:循环批量执行命令(含超时与密钥认证要点)、用 SFTP 上传下载文件、包一层重试逻辑应对网络抖动,十几行代码覆盖日常九成运维需求。

做运维或测试经常要同时操作十几台服务器,一台台 SSH 登录敲命令效率太低。paramiko 是 Python 里最常用的 SSH 库,十几行代码就能批量执行命令、传文件。下面分享 3 个我常用的场景。

一、批量执行命令

把机器列表放进一个文件,循环连接并执行同一条命令:

import paramiko

with open("hosts.txt") as f:
    for line in f:
        ip, user, pwd = line.strip().split(",")
        cli = paramiko.SSHClient()
        cli.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        cli.connect(ip, username=user, password=pwd, timeout=5)
        _, out, err = cli.exec_command("df -h /")
        print(ip, out.read().decode())
        cli.close()

注意三点:超时一定要设(timeout=5),否则某台机器宕机会卡住整个循环;生产环境建议改用密钥认证(key_filename 参数),不要在代码里放密码;exec_command 每次是一个独立会话,多条有依赖的命令用分号连成一条。

二、上传下载文件

SFTP 是 paramiko 自带的子模块,比 scp 更好编程:

sftp = cli.open_sftp()
sftp.put("local.log", "/tmp/remote.log")
sftp.get("/var/log/app.log", "app.log")
sftp.close()

批量分发配置文件、回收日志都很方便。大文件建议配合进度回调(put 的 callback 参数)打印进度。

三、包一层重试逻辑

网络抖动很常见,直接裸调会偶发失败。简单包一层:

import time

def run_with_retry(fn, n=3, wait=2):
    for i in range(n):
        try:
            return fn()
        except Exception as e:
            if i == n - 1:
                raise
            time.sleep(wait)

把 connect 或 exec_command 包进 run_with_retry,成功率立刻上去。

小结

paramiko 的定位是「能用 Python 表达的 SSH」:批量执行、文件传输、异常重试三板斧覆盖了日常九成需求。机器规模上百后可以再升级到 Ansible 这类编排工具,但理解 paramiko 的原理会让你排查 Ansible 问题时不慌。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。