| name | ssh-connection |
|---|---|
| description | This skill should be used when the user asks to "连接服务器", "SSH连接", "配置服务器SSH", "远程服务器配置", "ssh -p", "SSH密钥配置", "服务器密钥认证", "SSH key setup", "remote server connection" |
| version | 1.2.0 |
| allowed-tools | Bash, PowerShell, Read, Write, Edit |
SSH 连接配置技能
概述
配置远程服务器的 SSH 密钥认证。配置完成后,直接使用标准 SSH/SCP 命令操作服务器。
范围:仅负责连接配置,不包含命令执行和文件传输功能。
服务器类型:
- 普通云服务器:Host/Port 不变
- 代理式实例(如 AutoDL):重启后 Host/Port 可能改变
调用方式
/ssh-connection <输入>
支持格式:ssh -p 端口 user@host、host:port、user@host、host
脚本目录
~/.claude/skills/ssh-connection/scripts/
├── config.py # 配置文件
├── host_key.py # 主机密钥策略(accept-new)
├── deploy_key.py # 推送公钥(SFTP 写入,密码走环境变量)
├── generate_key.ps1 # 生成密钥(Windows)
├── generate_key.sh # 生成密钥(macOS / Linux)
├── ensure_config.ps1 # 确保 SSH Config 存在(Windows)
├── ensure_config.sh # 确保 SSH Config 存在(macOS / Linux)
├── get_server_id.py # 获取服务器身份
├── logger.py # 操作日志
└── server_meta.py # 元数据管理
数据存储
- SSH Config:
~/.ssh/config(权威源) - known_hosts:
~/.ssh/known_hosts(主机密钥) - 元数据:
~/.ssh_manager/servers.json(hostname、machine_id、时间戳) - 操作日志:
~/.ssh_manager/operations.log(JSON Lines)
处理流程
步骤 1:解析输入
提取 host、port(默认22)、user(默认root)。
步骤 2:检查配置
读取 ~/.ssh/config,匹配 host+port+user。
已配置 → 跳转步骤 4(测试连接)
未配置 → 检测地址变化(见下方)
地址变化检测
条件:相同 user,不同 host/port
- 用已有密钥连接新地址
- 获取 hostname + machine_id
- 与
servers.json比对 - 匹配 → 更新配置;不匹配 → 询问用户
步骤 3:配置新服务器
- 生成别名:域名取首段,IP取末段
- 询问密码:内存使用,不存储
- 生成密钥:
generate_key.ps1/generate_key.sh - 推送公钥:
deploy_key.py(密码通过SSH_PASSWORD环境变量传递,SFTP 写入) - 写入 SSH Config
- 保存元数据
步骤 4:测试连接
ssh <别名> "hostname && echo CONNECTION_OK"
步骤 5:响应结果
连接成功 → 提示可用命令 连接失败 → 报告错误原因
异常处理
| 异常 | 处理 |
|---|---|
| 别名冲突 | 自动追加后缀 |
| 密码错误 | 重试(最多3次) |
| 连接失败 | 报告错误 |
| 地址变化 | 多维度验证 |
| 主机密钥变化 | 拒绝连接并告警(可能为 MITM) |
安全约束
- 密码不存储,只通过
SSH_PASSWORD环境变量传递,不接受命令行参数 - 不打印密码到日志
- 公钥经 SFTP 写入
authorized_keys,不经 shell 插值,杜绝注入 - 主机密钥 accept-new:未知主机首次接受并记录;密钥变化时拒绝连接并告警
- 冲突时追加后缀,不覆盖已有配置
维护命令
# 列出服务器
python scripts/server_meta.py list
# 清理死服务器(仅提示,不自动删除)
python scripts/server_meta.py cleanup 30
# 删除服务器
python scripts/server_meta.py remove <alias>
# 查看操作日志
python scripts/logger.py show 20
版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| 1.2.0 | 2026-10-25 | 安全加固:主机密钥 accept-new 策略、SFTP 写入防注入、移除密码命令行参数;跨平台(macOS/Linux);原子化写入元数据 |
| 1.1.0 | 2025-08-15 | 安全优化:密码通过环境变量传递;添加操作日志;精简文档 |
| 1.0.0 | 2025-08-15 | 初始版本 |
