SSH 远程登录
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_ff429dcb/ssh-remote-login。
技能介绍
要解决什么问题
运维和开发里常见场景是:手头只有 IP、用户名和密码(或私钥),需要在远程机器上跑一条或几条命令——查磁盘、看日志、重启服务——又不想在本机长期保存 SSH 配置,更不希望 Agent 把密码写进文件或日志。本技能把「连上服务器 → 执行命令 → 把 stdout/stderr 还给调用方」收敛成一条可重复的流程,并在安全侧明确不缓存凭据、校验主机密钥。
如何工作
- 连接:依赖
paramiko,参数包括host、port(默认 22)、username,以及password与key_path二选一;连接阶段默认connect_timeout15 秒。 - 执行:通过
ssh_exec在 PTY 模式下跑远程命令,默认执行超时 30 秒;支持ssh_exec_batch按顺序批量执行多条命令。 - 信任基线:禁用 SSH Agent(
allow_agent=False)和自动扫本地密钥(look_for_keys=False);对新主机写入known_hosts,主机密钥变更时拒绝连接并提示清缓存。 - 错误处理:对域名解析失败、连接超时、端口拒绝、认证失败、命令超时等做了分级提示;Windows 上认证反复失败时可调用
clear_local_ssh_cache清理凭据管理器里的ssh:缓存。
边界与注意点
| 能做 | 不能做 |
|------|--------|
| 单台主机远程执行可一次完成的命令 | SCP/SFTP 传文件、交互式 Shell(top/vi) |
| 密码或私钥路径由用户当场提供 | 持久化修改本机 SSH 配置、主动 sudo |
PTY 下 stderr 会并入 stdout,返回的 stderr 常为空,解读输出时要从 stdout 里识别 Permission denied、not found 等。长任务可能被 30 秒超时截断;敏感破坏性操作需调用方征得用户确认,技能本身不做硬拦截。输出展示时应保留原始命令输出,并附简短结论,且不得在回复中泄露密码或私钥内容。
使用场景
- 内网或云主机告警后,用 IP 与账号登录,执行 `df -h`、`uptime` 判断磁盘与负载是否异常。
- 已配置私钥时连接生产机,远程执行 `systemctl restart nginx` 并用 `systemctl status` 确认服务是否拉起。
- 排障时需在目标服务器查看 `/var/log/syslog` 最近 50 行,不想在本机长期维护 SSH 配置文件。
- 服务器密码已变更但客户端仍认证失败时,清本地 `known_hosts`/Windows 凭据缓存后用新密码重连并验证。
适合人员
- 维护单台云主机的独立开发者,希望在对话里直接跑 `docker ps`、查版本而不每次手动开终端 ssh。
- 值班运维工程师,事故窗口内需要快速汇总远程 CPU、内存、磁盘输出并判断是否要扩容或杀进程。
- 在 Windows 上使用 OpenSSH 的工程师,改密后凭据管理器仍缓存旧密码,需要按技能流程清缓存再重连。
- 负责单机健康巡检的初级 SRE,需要按顺序批量执行 `uptime`、`free`、`df` 并给出模块化的健康结论。