SSHClient 教程:PyQt5 远程终端 + AI Agent 运维助手

管几台 Linux 服务器,Xshell 要收费、PuTTY 功能太简陋、FinalShell 又有广告,想要一个免费、功能全、还能让 AI 帮你干活的 SSH 客户端,SSHClient 就是为这个需求做的:基于 PyQt5 与 paramiko 的 Windows SSH 客户端,带交互式终端、SFTP 文件浏览、CPU/内存/磁盘实时监控,还集成了 OpenAI 兼容的 AI Agent,可以用自然语言让 AI 去远程主机上执行命令、查指标、读写文件。本文从安装、配置到 AI 运维实战,把它完整讲一遍。

一、项目简介

SSHClient(仓库名 sshclient)是 git.cnbugs.com 上 AI-Agent 组织的一个开源项目。它是一个桌面 SSH 客户端,界面用 PyQt5 写,SSH 连接用 paramiko,定位是“Windows 上开箱即用的免费 SSH 客户端”,同时代码兼容 macOS 与 Linux。最大的亮点是内置的 AI Agent:接 OpenAI 兼容的 API(OpenAI、DeepSeek、Kimi、通义千问、Ollama 等),用自然语言下指令,AI 自动调用工具操作远程主机。

  • 仓库:git.cnbugs.com/AI-Agent/sshclient
  • 语言:Python(PyQt5 + paramiko)
  • 平台:Windows 为主,代码兼容 macOS / Linux
  • 打包:PyInstaller 打成单文件 exe,约 50-60 MB
  • AI:OpenAI 兼容 API,5 个工具自动调用
  • 许可证:MIT

二、功能特性总览

模块说明
多主机管理增删改查、密码/私钥双认证、配置导入导出、配置持久化到 ~/.sshclient/
远程终端真实交互式 shell(Xshell 风格)、ANSI 颜色、本地历史、Ctrl+A/E/U/K/W 快捷键
命令片段20+ 预置常用命令(ss/df/ps/docker/systemctl 等),一键发送到终端,可自定义增删改
SFTP 文件浏览目录树浏览、上传/下载(带进度条)、新建目录、删除、重命名、双击进入
实时监控CPU/内存/负载/启动时间/磁盘/网络速率/进程列表,1-10 秒可调刷新间隔
趋势迷你图CPU 和内存使用率实时折线图,最近 60 个采样点
进程管理进程表(500 条)、搜索过滤、CPU/内存排序、树形视图、右键杀进程、批量操作
AI AgentOpenAI 兼容 API(OpenAI / DeepSeek / Moonshot / 通义千问 / Ollama 等),5 个工具自动调用
暗色主题视图菜单一键切换暗/亮主题,偏好自动持久化
跨平台代码兼容 Windows / macOS / Linux(PyQt5 + paramiko)

三、适用场景

  • 日常运维:同时管多台服务器,终端、文件、监控、进程都在一个窗口里,不用来回切换工具。
  • 排障:服务器 CPU 高了、磁盘满了、服务起不来,先让 AI 去看一圈,再按 AI 给的结论动手。
  • 批量巡检:用命令片段一键发常用命令(ss、df、ps、docker ps、systemctl status),不用每次手敲。
  • 文件传输:传配置文件、拉日志、备份小文件,SFTP 图形界面比 scp 命令直观。
  • 新手运维:记不住命令的新手可以用自然语言问 AI,让 AI 在远程主机上执行并解释结果。
  • 内网 + 本地模型:接 Ollama 本地模型,AI 对话不出内网,适合对数据敏感的环境。

四、安装与构建

4.1 Windows:双击打包,拿 exe 直接用

最简单的方式是双击 build_windows.bat 打包:

  • 安装 Python 3.10+(安装时勾选 Add to PATH)。
  • 把整个项目目录拷到 Windows 电脑。
  • 双击 build_windows.bat,等 2-3 分钟。
  • 产物是 dist\SSHClient.exe,单文件约 50-60 MB,拷给任何人双击就能运行,不用再装 Python。

手动打包的方式也一样简单:

python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
pyinstaller build.spec --clean --noconfirm

4.2 Linux/macOS:开发运行与打包

./build.sh        # 一键打包当前平台二进制
python main.py    # 直接开发运行

4.3 测试

source venv/bin/activate
python test_core.py   # 核心模块 smoke test(无网络依赖)
python test_ui.py     # UI 组件加载测试(offscreen 渲染)
python test_e2e.py    # 端到端测试(需本机或可访问的 sshd)

五、主机管理

左侧点“➕ 新增主机”,填主机名或 IP、端口、用户名、密码(可选私钥文件)。配置持久化到 ~/.sshclient/ 目录,换电脑时可以导出配置再导入。认证支持密码与私钥两种方式,私钥文件直接选本地的 .pem 或 id_rsa,生产服务器建议用私钥 + 禁密码登录的组合。

选中主机点“🔌 连接”,状态指示器变绿后就可以使用。连接信息包括主机、端口、用户名、认证方式,改配置不用重新加主机,直接编辑即可。

六、远程终端与命令片段

“⌨ 终端”Tab 是真实交互式 shell,Xshell 风格:支持 ANSI 颜色、↑↓ 历史回放、Ctrl+A/E/U/K/W 行编辑快捷键,vim、top、htop 这类交互程序都能正常用。

命令片段是提效的关键:工具栏下拉框里有 20+ 预置常用命令(ss、df、ps、docker、systemctl 等),选中后一键发送到终端,不用手敲。点 ⚙ 可以管理自定义片段,把你常用的巡检命令存进去:

# 几个值得存成片段的巡检命令
ss -tlnp                          # 看监听端口
df -h                             # 看磁盘
free -h                           # 看内存
ps aux --sort=-%mem | head -20    # 看最占内存的进程
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
systemctl list-units --type=service --state=failed
journalctl -u nginx -n 50 --no-pager

七、SFTP 文件浏览

“📁 文件”Tab 是 SFTP 图形界面:目录树浏览、双击目录进入、双击文件直接下载;上传、下载带进度条;支持新建目录、删除、重命名。传配置文件、拉日志、备份小文件都在这里完成,不用另开 WinSCP。

注意 SFTP 走的是 SSH 的 22 端口,和终端共用同一条连接,不用额外开端口。传大文件时进度条会显示实时速度,传一半断了可以重新传。

八、实时监控与进程管理

“📊 监控”Tab 点“开始监控”,指标按设定间隔(1-10 秒可调)刷新:CPU、内存用大字突出,下方有实时趋势折线图(最近 60 个采样点),磁盘用进度条,网络显示当前速率。下半区是进程管理表,支持搜索过滤、CPU/内存排序、树形视图、右键杀进程、批量操作。

这个监控是轻量的:它通过 SSH 通道定时在远程执行命令采集指标,不需要在服务器上装 agent。适合临时看一眼服务器状态,不适合替代 Prometheus + Grafana 这种长期监控。

九、AI Agent 配置与使用

AI Agent 是 SSHClient 最有特色的功能。它通过 OpenAI 兼容的 HTTP API 跟大模型对话,并把 5 个工具暴露给模型,模型可以自主决定调用哪个工具、在远程主机上执行操作,再把结果汇总成结论给你。整个过程不需要本地 GPU,配好 API Key 与 endpoint 就能用。

9.1 配置 AI

  • 点“⚙ AI 设置”,选择预设(OpenAI / DeepSeek / Kimi / 通义千问 / Ollama)或自定义填 API Key。
  • 回到“🤖 AI Agent”Tab,用自然语言提问。
预设Base URL模型
OpenAIhttps://api.openai.com/v1gpt-4o-mini
DeepSeekhttps://api.deepseek.com/v1deepseek-chat
Moonshot Kimihttps://api.moonshot.cn/v1moonshot-v1-8k
通义千问https://dashscope.aliyuncs.com/compatible-mode/v1qwen-turbo
智谱 GLMhttps://open.bigmodel.cn/api/paas/v4glm-4-flash
Ollama(本地)http://127.0.0.1:11434/v1qwen2.5:7b
自定义-任意 OpenAI 兼容端点

9.2 AI 能调用的 5 个工具

这 5 个工具是 AI 操作远程主机的全部手段(以源码 core/ai_agent.py 中的 TOOL_DEFINITIONS 为准):

工具作用关键参数
exec_ssh_command在远程主机执行一条 shell 命令,返回标准输出、错误与退出码command(必填),timeout(默认 30 秒,最大 300 秒)
get_system_metrics获取实时系统指标:CPU 使用率/核心数、内存、磁盘、各网卡收发字节、负载无参数
list_remote_files列出远程主机指定目录的文件与子目录path(默认 /)
read_remote_file读取远程主机上一个文本文件的内容(最大 8000 字节,超过截断)path(必填)
upload_local_file把本地文件上传到远程主机的指定路径local_path、remote_path(必填)

9.3 使用示例

回到 AI Agent Tab,用自然语言提问,AI 会自动调用工具并给出结论:

  • “帮我看 CPU 为什么这么高”——AI 会调 get_system_metrics 看指标,再调 exec_ssh_command 查最占 CPU 的进程,最后告诉你哪个进程、什么原因。
  • “找出 /var/log 下最大的 10 个文件”——AI 调 exec_ssh_command 执行 du 排序,把结果列出来。
  • “重启 nginx 服务”——AI 调 exec_ssh_command 执行 systemctl restart nginx,再确认服务状态。

AI 的工作方式是多轮工具调用:单轮最多 8 个工具调用步骤(max_steps=8),避免死循环;每轮先调工具拿真实数据,再回答,不凭空猜测;对破坏性操作(rm -rf、kill -9、systemctl stop、重启等)会先向你确认;回复用中文,给出可执行的结论和命令。工具返回的结果超过 6000 字符会被截断,避免撑爆上下文。

从代码层面看,AI Agent 的调用方式也很简单(core/ai_agent.py):

from core.ai_agent import AIAgent

# 初始化:API Key + 兼容端点 + 模型
agent = AIAgent(
    api_key="sk-xxxx",
    base_url="https://api.deepseek.com/v1",
    model="deepseek-chat",
)

# 一轮对话:user_message 是你的问题,
# tool_executor 是执行工具的回调(工具名, 参数)-> 文本结果
answer = agent.chat(
    "帮我看 CPU 为什么这么高",
    tool_executor=executor,
)
print(answer)

十、AI 安全注意事项

这一点必须单独强调:AI Agent 可以执行任意命令,安全边界由你自己把控。

  • API Key 权限:README 明确建议使用只读权限的 API Key,或者在 prompt 中限定危险操作前需确认。
  • 破坏性操作要确认:AI 的系统提示词里写了,对 rm -rf、kill -9、systemctl stop、重启等操作务必先确认,不要为了省事关掉这个约束。
  • 生产环境慎用:先在测试机上跑顺了,确认 AI 的行为符合预期,再用到生产主机;重要操作先在终端里手动确认一遍。
  • 本地模型:对数据敏感的环境用 Ollama 本地模型,对话不出内网,API Key 也不用交给第三方。
  • 工具返回截断:read_remote_file 最多读 8000 字节,工具结果超过 6000 字符会被截断,看大文件时让 AI 分段读,不要一次读整个日志。

十一、测试与故障排查

问题解决
python 不识别安装 Python 时勾选 Add Python to PATH
打包失败 ModuleNotFoundError用 pip install <module> 后重新打包
exe 启动黑窗闪过已用 console=False,如还出现请检查杀毒软件
SSH 连接超时检查防火墙、22 端口、目标主机 sshd 是否运行
AI 设置测试连接失败检查 API Key 是否正确、Base URL 是否可访问、代理设置

十二、运维建议

  • 配置备份:主机配置存在 ~/.sshclient/,定期备份这个目录,换电脑直接恢复。
  • 私钥管理:私钥文件不要放在共享目录,设好文件权限,生产主机优先用私钥认证、禁密码登录。
  • AI 模型选择:日常排障用便宜的模型(如 deepseek-chat、qwen-turbo)就够了,复杂任务再切强模型;本地 Ollama 适合内网与隐私场景。
  • 监控不是替代品:内置监控适合临时看一眼,长期监控还是用 Prometheus + Grafana,告警用专门的告警系统。
  • 升级:拉新代码后重新打包 exe 覆盖旧文件即可,配置在 ~/.sshclient/ 里不受影响。

SSHClient 把终端、SFTP、监控、进程管理这四件运维每天都要用的事收进一个窗口,再叠加一个能真正动手干活的 AI Agent:查指标、找大文件、重启服务,一句话就能让 AI 去执行。它的定位不是替代 Xshell,而是给想要“免费 + AI 辅助”的运维一个开箱即用的选择。先在 Windows 上打个 exe 跑一周,AI 排障顺手了,再把它变成主力客户端。

注意:还有一个名字很像的项目叫 ssh-client(带连字符),那是 Electron + TypeScript 写的另一个桌面 SSH 客户端,也有 AI 功能,但和这个 PyQt5 的 SSHClient 是两个不同的项目,不要混淆。关于 ssh-client 的详细介绍,见本站另一篇教程《智能SSH终端教程:Electron + AI 助手的远程运维桌面客户端》。

发表回复

后才能评论