用 Python + Paramiko 远程管理服务器

Python2026-08-28

服务器没有配 SSH 免密,每次在 PowerShell 里敲 ssh 命令,一层层的引号转义特别容易出错。复杂一点的命令(比如内嵌 SQL)直接就废了。

基本封装

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, 22, user, password, timeout=15)

def run(cmd, timeout=30):
    _, stdout, stderr = client.exec_command(cmd, timeout=timeout)
    out = stdout.read().decode("utf-8", errors="replace")
    err = stderr.read().decode("utf-8", errors="replace")
    return out + err

把密码放配置文件里,每次写运维脚本就是纯 Python 逻辑,再也不用跟引号搏斗。

传文件用 SFTP

sftp = client.open_sftp()
sftp.put(r"C:\local\file.py", "/remote/path/file.py")
sftp.close()

上传本地改好的脚本、把服务器日志拉回来看,都很方便。

几个注意点

  • exec_command 每次都是独立的 shell,cd 不会延续,长命令用 && 串联
  • 读输出记得 errors="replace",避免编码问题直接抛异常
  • 超时很重要:网络抖动时没有超时会卡死整个脚本
  • 用完记得 client.close(),或者用 try/finally 包住

← 返回首页