用 Python + Paramiko 远程管理服务器
服务器没有配 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 包住