# ssh-manager **Repository Path**: ytgcc/ssh-manager ## Basic Information - **Project Name**: ssh-manager - **Description**: SSH Manager 是一个基于终端的交互式 SSH 连接管理工具,旨在解决运维和开发人员日常管理中需要频繁记忆和手动输入多台服务器连接信息的问题。它将所有服务器的连接信息集中存储在一个本地文件中,通过菜单式操作实现快速连接、密钥管理和连通性检测,降低重复操作成本。 - **Primary Language**: Shell - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-09 - **Last Updated**: 2026-07-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SSH Manager — 功能说明文档 ## 业务背景 SSH Manager 是一个基于终端的交互式 SSH 连接管理工具,旨在解决运维和开发人员日常管理中需要频繁记忆和手动输入多台服务器连接信息的问题。它将所有服务器的连接信息集中存储在一个本地文件中,通过菜单式操作实现快速连接、密钥管理和连通性检测,降低重复操作成本。 ## 适用场景 - 管理多台远程服务器的开发/运维人员,需要一个轻量级的连接簿 - 频繁在不同服务器间切换,希望一键连接而非每次手动输入 IP、端口、用户名 - 需要批量检查服务器连通性(网络层、端口层、认证层)的场景 - 希望统一管理 SSH 密钥并分发公钥以实现免密登录 ## 数据存储 所有连接记录以管道符分隔的格式保存在脚本同目录下的 `sh-resource` 文件中,每条记录包含以下字段: | 字段 | 说明 | 默认值 | |------|------|--------| | 连接名 | 自定义的服务器别名,用于快速识别 | 必填 | | IP 地址 | 远程服务器的 IP 或域名 | 必填 | | 登录用户 | SSH 登录使用的用户名 | root | | 端口 | SSH 服务端口 | 22 | | 备注 | 任意说明文字 | 空 | | 密码 | 登录密码(本地明文存储) | 空 | 脚本启动时会自动检测旧版五字段格式并迁移至当前六字段格式,确保向后兼容。 ## 功能模块 ### 1. 连接记录管理(CRUD) - **添加记录:** 交互式录入连接名、IP、用户、端口、备注和密码,校验连接名和 IP 不能为空 - **修改记录:** 选择已有记录进行逐项修改,直接回车保留原值,无需重新输入全部字段 - **删除记录:** 按序号删除指定记录,操作前展示当前列表供确认 ### 2. 列表展示 以对齐的表格形式展示所有连接记录,包含序号、连接名、IP、登录用户、端口、备注和密码七列。表格宽度根据内容自适应计算,正确处理中英文混合字符的显示宽度。支持密码列的显示/隐藏切换,隐藏时统一显示为星号。 ### 3. SSH 连接 选择记录后直接发起 SSH 连接,使用记录中保存的用户名、IP 和端口。连接失败时给出明确提示并返回菜单。 ### 4. SFTP 连接 选择记录后发起 SFTP 文件传输会话,便于进行文件上传下载操作。 ### 5. 连接测试 对指定服务器执行分层连通性检测,按以下顺序逐步进行: | 检测层 | 方式 | 说明 | |--------|------|------| | 网络层 | Ping | 检测目标 IP 是否可达 | | 端口层 | nc (netcat) | 检测 SSH 端口是否开放 | | 免密层 | SSH BatchMode | 检测是否已配置密钥免密登录 | | 密码层 | expect / sshpass / plink | 检测密码认证是否可用 | 密码认证兼容多种平台:macOS 使用自带的 `expect`,Linux 支持 `sshpass`,Windows/Git Bash 支持 `plink`(PuTTY)。任一环节失败即停止后续检测并报告结果。 ### 6. 密钥生成 交互式生成 SSH 密钥对,支持三种算法: - **Ed25519**(推荐)— 安全性高、密钥短、性能好 - **RSA 4096** — 兼容性最广 - **ECDSA 521** — 椭圆曲线算法 支持自定义密钥文件名和密码短语(passphrase),生成前检查同名文件是否已存在并提示确认覆盖。 ### 7. 公钥分发 选择目标服务器后,自动扫描本地 `~/.ssh/` 目录下的所有公钥文件,若有多个公钥则提供选择,然后通过 `ssh-copy-id` 将公钥传入远程服务器,完成后该服务器即可免密登录。操作时会醒目显示目标服务器的密码信息,方便手动输入验证。 ## 操作方式 脚本运行后进入全屏菜单界面,通过单键快捷操作: | 快捷键 | 功能 | |--------|------| | q | SSH 连接 | | w | SFTP 连接 | | e | 显示/隐藏密码 | | r | 修改记录 | | a | 添加记录 | | d | 删除记录 | | c | 测试连接 | | s | 传入公钥 | | g | 生成密钥 | | x | 退出 | 每次操作完成后按任意键返回主界面,主界面顶部展示当前所有连接记录的表格。 ## 终端显示 ![输入图片说明](imageimage.png)