Sublime Text 仅是文本编辑器,不支持SSH远程执行;开发巡检脚本需用paramiko或fabric3在终端运行,而非依赖其Build System或过时插件。

Sublime Text 本身不支持 SSH 执行,别被“开发脚本”误导
Sublime Text 是纯文本编辑器,没有内置 SSH 客户端、不运行 Python 或 Shell 环境,也不能直接执行远程命令。所谓“在 Sublime 里开发自动化巡检脚本”,实际只是用它写代码(比如 paramiko 脚本或 ansible-playbook YAML),真正执行靠的是外部解释器或工具链。常见误解是装个插件就能点一下就跑远程命令——目前没有任何稳定插件能可靠替代 ssh 命令或 paramiko 库的权限管理、密钥加载、超时控制等关键能力。
实操建议:
- 用 Sublime 编辑
check_disk.py,但通过终端运行:python check_disk.py,而非依赖 Sublime 的 Build System - 避免使用过时插件如
SublimeSSH(已多年未更新,不支持 OpenSSH 8.0+ 的密钥格式) - 若想快捷运行,可配置 Sublime 的
Tools → Build System → New Build System,内容设为:{ "shell_cmd": "python3 $file", "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python" }但注意:这仍只是调本地 Python,不解决 SSH 远程问题
远程执行必须用 paramiko 或 fabric,别硬套 subprocess + ssh
有人试图用 subprocess.run(["ssh", "user@host", "df -h"]) 写巡检脚本,看似简单,实则埋雷:密码交互无法自动化、ssh 配置(如 StrictHostKeyChecking)容易被忽略、错误码捕获不完整、并发多主机时阻塞严重。
推荐路径是 paramiko(轻量、可控)或 fabric3(基于 paramiko 封装,语法更简洁):
-
paramiko优势:显式控制连接、通道、SFTP;可处理密钥加密、自定义 banner 检查、细粒度超时(timeout=5) -
fabric3(非 fabric 2+)优势:Connection("host").run("df -h")一行即发,自动重试、结果对象含stdout/stderr/exited - 避坑点:fabric 2.x 默认用
invoke引擎,不兼容老式fabfile.py;生产环境建议锁定fabric3==1.14.0 - 示例片段(paramiko):
import paramiko client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect("192.168.1.10", username="ops", key_filename="/path/id_rsa", timeout=8) stdin, stdout, stderr = client.exec_command("df -h | awk '$5 > 85 {print $1,$5}'") print(stdout.read().decode()) client.close()
结果汇总报警不能只拼字符串,得结构化+分级
巡检脚本常犯错:把所有主机输出用 "\n".join(results) 拼成大文本,再用 if "ERROR" in full_log: 判断是否报警——这会漏掉磁盘 95% 但无 ERROR 字样的情况,也无法区分警告(warn)和严重(critical)。
正确做法是让每台主机返回结构化结果:
- 用字典承载指标:
{"host": "db01", "disk_usage": 92.3, "status": "warning", "timestamp": "2024-04-05T10:23:01"} - 定义阈值规则:比如
disk_warn=85,disk_crit=95,而非硬编码字符串匹配 - 汇总后按
status分组:[r for r in results if r["status"]=="critical"],再触发企业微信/钉钉 Webhook - 别忽略异常主机:某台连不上 SSH,应记为
{"host": "cache03", "status": "unreachable", "error": "socket.timeout"},否则汇总时直接消失
Sublime 中调试 paramiko 报错最常卡在密钥和认证环节
运行时报 AuthenticationException: Authentication failed. 或 SSHException: No authentication methods available,90% 不是代码问题,而是环境细节没对齐:
- 确认私钥格式:OpenSSH 8.8+ 默认生成
sk-ssh-ed25519@openssh.com类型密钥,paramiko 不支持,需用ssh-keygen -t rsa -b 4096 -m PEM重生成 PEM 格式 - 检查私钥权限:Linux/macOS 下必须是
600(chmod 600 id_rsa),否则 paramiko 拒绝加载 - 用户名错误:不是当前登录用户,而是远程服务器上的运维账号(如
ansible或monitor),且该账号需有sudo权限执行df/systemctl等命令 - 防火墙/网络:Sublime 在本机编辑,但脚本运行在终端,确保终端能通目标端口(
telnet 192.168.1.10 22)
复杂点在于:同一份脚本,在 PyCharm 里能跑通,扔进 Sublime 的 Build System 就报密钥错——大概率是 Build System 启动的 shell 环境没加载 ~/.bashrc,导致 $HOME 路径异常,读不到 ~/.ssh/id_rsa。这时候别折腾插件,直接终端跑。











