- Added details on local terminal invocation options, including the ability to set the initial working directory. - Included new supported link formats for local connections in both Chinese and English documentation. - Clarified handling rules for external local terminal requests and their interaction with saved connections.
366 lines
16 KiB
Markdown
366 lines
16 KiB
Markdown
---
|
||
sidebar_position: 1
|
||
---
|
||
|
||
# SSH 连接管理
|
||
|
||
SSH 仍然是 NyaTerm 最完整的一类会话。除了基础登录外,SSH 连接还可以进一步挂接:
|
||
|
||
- SFTP 文件浏览器
|
||
- 远程资源监控、GPU 监控、进程管理、Docker 管理
|
||
- 代理
|
||
- 跳板机
|
||
- OTP 绑定与自动填充
|
||
- 端口隧道
|
||
- SSH 算法偏好
|
||
|
||
如果你第一次接触 NyaTerm,通常建议先把 SSH 连接配置好,再去扩展文件、终端增强和网络能力。
|
||
|
||
## 创建 SSH 连接
|
||
|
||
在 **新建连接** 窗口切换到 **SSH** 标签后,可以填写这些信息:
|
||
|
||
### 基本信息
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| 连接名称 | 在已保存连接列表中的显示名称 |
|
||
| 主机 | 服务器 IP 或域名 |
|
||
| 端口 | 默认 `22` |
|
||
| 用户名 | 登录用户名 |
|
||
| 图标 | 用于区分不同环境或服务 |
|
||
| 分组 | 把连接整理到文件夹中 |
|
||
| 描述 | 记录用途、环境或备注 |
|
||
|
||
### 认证方式
|
||
|
||
NyaTerm 支持四种 SSH 认证方式:
|
||
|
||
- **密码**
|
||
- **私钥**
|
||
- **无认证(none)**
|
||
- **SSH Agent**
|
||
|
||
你可以直接选择已经保存的密码或私钥,而不必每次重复填写。
|
||
|
||
**无认证(none)** 适用于通过其他方式完成认证的主机(例如部分跳板机或网关流程,或接受空认证的服务器)。仅在目标主机确实不需要任何 SSH 层凭证时才使用。
|
||
|
||
#### 密码认证
|
||
|
||
适合:
|
||
|
||
- 临时测试机
|
||
- 还未发放私钥的环境
|
||
- 与 OTP 联合使用的账号
|
||
|
||
#### 私钥认证
|
||
|
||
适合:
|
||
|
||
- 日常远程运维
|
||
- 多台主机复用同一身份
|
||
- 需要配合跳板机或自动化流程的场景
|
||
|
||
私钥和密码都可以在 **Security/Auth** 面板中统一管理。
|
||
|
||
#### SSH Agent 认证
|
||
|
||
SSH Agent 模式只使用本机 Agent 提供的签名能力,私钥和硬件密钥不会导入 NyaTerm。基础认证区域只能选择一个 Agent endpoint;可根据当前设备选择自动发现、环境变量、Unix 域套接字、Pageant 或 Windows OpenSSH Agent。`Auto` 会使用当前平台的默认 Agent。Agent 不可用或没有匹配身份时,连接会失败并显示原因。
|
||
|
||
Agent endpoint 和 forwarding 开关属于设备本地连接配置。跨设备同步时不会覆盖目标设备的这些值,因此 macOS 的 Unix socket 配置不会被同步到 Windows。
|
||
|
||
当 Agent 正在等待硬件触摸、PIN 或桌面确认时,NyaTerm 会显示确认弹窗。Agent 超时或认证失败后可以选择“重试”;重试会丢弃当前连接并重新建立完整的 SSH/跳板机链路。选择“取消”会终止本次连接。
|
||
|
||
### 交互式认证请求
|
||
|
||
当服务器要求额外的键盘交互输入、OTP 或重新认证时,NyaTerm 会通过专用 SSH 认证请求窗口收集信息,而不是把所有提示混在终端输出里。这样可以更清楚地区分:
|
||
|
||
- 普通密码 / 私钥认证
|
||
- 键盘交互认证
|
||
- OTP 或二次确认提示
|
||
- 需要重新开始的认证流程
|
||
|
||
如果某次认证请求来自未预期的主机或会话,请先核对连接信息再输入敏感内容。
|
||
|
||
### 连接类型与终端类型
|
||
|
||
SSH 表单提供 **连接类型** 和 **终端类型** 设置。
|
||
|
||
**标准服务器** 适合普通 Linux / Unix shell,会保留 SFTP 浏览、目录跟随、Shell 检测、Shell Integration、远程资源统计和自动图标识别等能力。
|
||
|
||
**网络设备** 适合交换机、路由器等非 Linux shell 的设备 CLI。选择后,NyaTerm 会在运行时关闭 SFTP 浏览、目录跟随、Shell 检测、Shell Integration、远程资源统计和自动图标识别,避免把设备 CLI 当作完整 shell 探测;这个选择不会改写已保存的 SFTP 选项。
|
||
|
||
终端类型会影响 SSH 会话向远端声明的 `$TERM`,可在 `xterm-256color`、`xterm`、`vt100`、`vt220`、`ansi`、`linux` 之间选择。连接老旧设备或字符界面异常时,可以尝试更保守的终端类型。
|
||
|
||
## 高级配置
|
||
|
||
SSH 表单的高级区域可以把连接从“能连上”扩展成“适合日常使用”的工作流配置。
|
||
|
||
### 代理
|
||
|
||
如果需要通过代理建立 SSH 连接,可以直接为当前连接选择已保存的代理配置。
|
||
|
||
当前代理支持:
|
||
|
||
- **SOCKS5**
|
||
- **HTTP**
|
||
- **ProxyCommand**
|
||
|
||
代理记录中可保存:
|
||
|
||
- 名称
|
||
- 协议
|
||
- 主机
|
||
- 端口
|
||
- 用户名 / 密码
|
||
|
||
### SSH Agent 转发
|
||
|
||
在高级配置的 **SSH Agent** 页签中可以单独启用 Agent 转发。未勾选时,NyaTerm 不会因为转发而建立本地 Agent 连接,也不会向服务器发送转发请求;如果认证方式本身选择了 SSH Agent,认证仍会使用 Agent。勾选后仅交互式终端会请求转发,SFTP、隧道和跳板机连接不会隐式开启本地 Agent 转发。
|
||
|
||
转发端点与登录认证端点相互独立。转发可以按顺序添加多个外部 SSH Agent,例如主 SSH Agent 和 gpg-agent 的 SSH-compatible socket。登录认证端点不会自动加入 forwarding;转发来源只由外部 SSH Agent 列表和 NyaTerm 已保存密钥开关决定,两类来源使用同一套 fingerprint 白名单或全量策略。
|
||
|
||
默认使用 fingerprint 白名单,空白名单表示远端看不到任何身份。切换为全量策略前会显示风险确认;它会暴露已启用来源当前及未来出现的身份。单个转发端点不可用时,身份选择器会显示局部错误,并保留其他端点的结果。身份按端点顺序合并,并受 SSH Agent 协议的 1,024 项和 256 KiB 响应上限约束;达到上限时,选择器会明确提示仅显示并转发确定性的前缀。
|
||
|
||
已建立的保存密钥 forwarding channel 会在保存密钥成功新增、替换或删除后失效,重新建立的 channel 才会读取当前密钥集合。Broker 和 legacy raw relay 共用有界的本地 channel 配额,Broker channel 具有首帧和空闲超时。Backup 跨操作系统恢复时会移除目标平台不支持的设备专属 Agent 端点,但损坏的值仍会拒绝校验。
|
||
|
||
:::warning
|
||
Agent 转发会让远端进程能够通过 SSH 使用所选外部 Agent 或 NyaTerm 保存密钥的签名能力。仅对可信服务器启用,并在不需要时保持关闭。Agent endpoint 和 forwarding 策略属于设备本地连接配置;外部硬件密钥不会被导入,NyaTerm 保存密钥是否进入现有加密 snapshot/sync 继续遵循应用已有策略。
|
||
:::
|
||
|
||
### 跳板机
|
||
|
||
如果目标主机不能直连,可以为当前 SSH 连接指定另一个已保存的 SSH 连接作为 **跳板机**。
|
||
|
||
适合的场景:
|
||
|
||
- 先进入堡垒机,再访问内网服务器
|
||
- 分环境隔离的生产网络
|
||
- 多层 SSH 登录链路
|
||
|
||
NyaTerm 会校验跳板机链路,阻止缺失引用和环路引用,避免连接时出现无限递归或难以排查的代理链路。
|
||
|
||
### 登录后命令
|
||
|
||
可以为当前 SSH 连接配置一条在登录后自动执行的命令。会话建立、shell 就绪后,NyaTerm 会自动运行它。
|
||
|
||
常见用途:
|
||
|
||
- 切换到固定的工作目录(`cd`)
|
||
- 激活某个环境(例如 tmux/screen、conda)
|
||
- 在连接时执行一条固定的初始化命令
|
||
|
||
该命令会在登录后作为终端输入发送,因此其行为等同于你自己手动输入这条命令。
|
||
|
||
### X11 转发
|
||
|
||
X11 转发允许远端 Linux 图形程序通过 SSH 显示到本机。
|
||
|
||
NyaTerm 不内置 X server,用户需要自行安装并启动:
|
||
|
||
- Windows: VcXsrv / Xming
|
||
- macOS: XQuartz
|
||
- Linux: Xorg / Xwayland
|
||
|
||
远端服务器需要:
|
||
|
||
- `sshd_config` 开启 `X11Forwarding yes`
|
||
- 安装 `xauth`
|
||
|
||
如果需要覆盖本机 DISPLAY,可以在 **设置 → 终端 → 本地 X11 DISPLAY** 中填写,例如 Windows 常用 `localhost:0`,Linux/macOS 常用 `:0`。
|
||
|
||
### SSH 算法偏好
|
||
|
||
可以为每个连接单独控制 SSH 握手时协商的加密算法,位于高级配置的 **SSH 算法** 卡片中,提供三种模式:
|
||
|
||
- **兼容(默认)**:使用较宽的算法列表,包含部分旧算法,便于连接老旧服务器或网络设备
|
||
- **安全**:只使用现代算法,排除旧的兼容项
|
||
- **自定义**:分别在 **密钥交换 / 加密 / MAC / 主机密钥** 四类中勾选并调整顺序
|
||
|
||
每个算法都会带有风险标记:
|
||
|
||
- **现代**(绿色)
|
||
- **旧版**(黄色,例如 `ssh-rsa`、`*-cbc`)
|
||
- **不安全**(红色,例如 `3des-cbc`、`hmac-sha1`、`ssh-dss`)
|
||
|
||
保存自定义配置时,NyaTerm 会校验每一类都不能为空,并拒绝无法识别的算法名。如果不确定该选什么,保留 **兼容** 模式即可;对安全性要求较高的环境建议使用 **安全** 或自定义收紧算法列表。
|
||
|
||
### 多路复用 SSH 会话
|
||
|
||
NyaTerm 可以在同一条 SSH 连接上多路复用多个终端会话。向同一主机打开新的终端时,会复用已有的已认证连接,而不必每次重新认证。
|
||
|
||
带来的好处:
|
||
|
||
- 新终端打开更快
|
||
- 更少的认证提示 / OTP 输入
|
||
- 对服务器的负载更低
|
||
|
||
### OTP 绑定
|
||
|
||
如果目标环境要求二次验证码,可以把一个 OTP 条目绑定到当前 SSH 连接。
|
||
|
||
绑定后有两种常见工作方式:
|
||
|
||
- 只是在认证时快速取码
|
||
- 开启 **自动填充 OTP**,在支持的交互流程中直接带入验证码
|
||
|
||
这部分可以结合 [OTP 与认证](./otp-and-auth) 一起使用。
|
||
|
||
## 已保存连接的管理
|
||
|
||
保存后的连接会出现在右侧 **已保存连接** 面板中。常见操作包括:
|
||
|
||
- 双击直接连接
|
||
- 按分组组织连接
|
||
- 编辑已有配置
|
||
- 复制连接作为新模板
|
||
- 重新连接已存在的会话来源
|
||
|
||
如果你维护大量主机,建议用分组、图标和描述把“环境 / 项目 / 角色”区分开。
|
||
|
||
## 临时 SSH 链接
|
||
|
||
如果只是想临时连一次,不想保存连接,可以使用 **临时 SSH 链接**。在已保存连接面板中打开该对话框(也可通过全局快捷键唤起),粘贴一段地址即可直接建立一次性会话。
|
||
|
||
支持两种输入形式:
|
||
|
||
- `ssh://user@host:port` 形式的 URL
|
||
- `ssh://user:password@host:port` 形式的 URL;密码只用于本次临时 SSH 会话,不会保存
|
||
- `ssh [-p port] [-l user] user@host` 形式的命令字符串
|
||
|
||
约定与限制:
|
||
|
||
- 默认用户名为 `root`,默认端口为 `22`
|
||
- 使用密码认证,不带代理、跳板机、登录后命令或 X11
|
||
- 出于安全考虑,只有 `ssh://` URL 可携带一次性密码;命令形式的内联密码(`user:pass@host`)以及 `-J`、`-L/-R/-D`、`-i`、`-o ProxyJump/ProxyCommand` 等不支持的选项会被拒绝
|
||
|
||
临时会话不会写入已保存连接:NyaTerm 会剥离连接 ID、代理、跳板机、登录后命令、X11 与算法偏好,因此它始终只是一次性会话。
|
||
|
||
## 外部调用与协议调用
|
||
|
||
NyaTerm 也可以从浏览器、脚本、启动器或其他工具中打开连接链接。外部调用会把链接交给当前 NyaTerm 主窗口;如果应用尚未启动,启动参数中的链接也会在主窗口就绪后处理。
|
||
|
||
支持的入口:
|
||
|
||
- 程序调用:把链接作为启动参数传给 NyaTerm,例如 `NyaTerm.exe ssh://root@example.com:22`
|
||
- 本地终端调用:使用 `NyaTerm.exe --local`,或通过 `NyaTerm.exe --local --cwd "D:\Projects\foo"` 指定初始工作目录
|
||
- 协议调用:通过系统 URL Scheme 打开 `ssh://`、`telnet://` 或 `nyaterm://` 链接
|
||
|
||
支持的链接格式:
|
||
|
||
- `ssh://user@host:port`
|
||
- `ssh://user:password@host:port`;密码只用于本次 SSH 临时会话,不会保存
|
||
- `telnet://host:port`
|
||
- `nyaterm://connect/ssh?host=host&port=22&username=user`
|
||
- `nyaterm://connect/telnet?host=host&port=23`
|
||
- `nyaterm://connect/local`
|
||
- `nyaterm://connect/local?cwd=<urlencoded-path>`
|
||
|
||
处理规则:
|
||
|
||
- SSH 默认用户名为 `root`,默认端口为 `22`;Telnet 默认端口为 `23`
|
||
- 本地终端外部调用不会匹配或创建已保存连接;`cwd` 只控制初始工作目录,不支持执行任意启动命令
|
||
- NyaTerm 会优先匹配同协议、同主机、同端口的已保存连接;SSH 链接显式写了用户名时,还会按用户名精确匹配
|
||
- 如果匹配到多个已保存连接,会弹出选择窗口;如果没有匹配项,会按临时连接打开
|
||
- 带一次性密码的 `ssh://` 链接始终作为临时连接处理,避免把外部传入的密码绑定到已保存连接
|
||
- `nyaterm://` 链接不接受 `password`、登录后命令、代理、跳板机、端口转发或私钥参数;需要这些能力时,请先保存连接后再打开
|
||
|
||
## 会话输入同步
|
||
|
||
需要同时对多台主机执行相同操作时,可以使用 **会话输入同步组**,把在一个终端里输入的内容广播到多个会话。
|
||
|
||
- 在同步组管理对话框中创建命名的、带颜色的同步组,并把当前存活的会话加入组中
|
||
- 组可以整体启用 / 停用,也可以对单个会话单独暂停
|
||
- 组内某个会话处于启用状态时,你在其中一个终端的按键会镜像到组内其他未暂停的会话;命令预览与历史记录只在你实际输入的原始会话上生成
|
||
- 底部 **发送命令** 面板提供目标选择:当前会话、全部会话,或某个具体的 `分组: <名称>`;分组目标会自动按会话类型(串口与 shell)过滤,并排除已暂停或重复的会话
|
||
|
||
同步组是运行时状态,不会被持久化,应用重启后需要重新建立。
|
||
|
||
## 导入其他客户端的会话
|
||
|
||
NyaTerm 支持导入其他客户端的会话配置,目前可导入:
|
||
|
||
- **Xshell**(`.xts`)
|
||
- **MobaXterm**(`.mxtsessions`)
|
||
- **WindTerm**(`.sessions`)
|
||
- **SecureCRT**(`.xml`)
|
||
- **FinalShell**(`conn` 目录)
|
||
- **Termius**(本机 IndexedDB)
|
||
- **NyaTerm JSON**(`.json`)
|
||
|
||
### 从 Termius 导入
|
||
|
||
选择 **Termius** 后,NyaTerm 会读取本机 Termius 的 IndexedDB,并通过系统凭据管理器 / Keychain / Secret Service 中的 `Termius/localKey` 解密会话数据。
|
||
|
||
可导入内容包括 SSH 主机、分组、用户名、密码和 SSH 私钥。为了避免产生半可信配置,只要任何 Termius 加密字段无法解密,本次导入会整体失败且不会写入连接。
|
||
|
||
如果默认路径未找到,可以手动选择 Termius 的 `file__0.indexeddb.leveldb` 目录。
|
||
|
||
### 从 NyaTerm JSON 导入
|
||
|
||
如果你需要批量整理连接清单,可以选择 **NyaTerm JSON** 并导入一个 `.json` 文件。这个格式适合从脚本、资产清单或其他系统生成会话数据。
|
||
|
||
示例文件:[session-import-sample.json](/examples/session-import-sample.json)
|
||
|
||
JSON 顶层字段:
|
||
|
||
- `version`:当前为 `1`
|
||
- `groups`:要预先创建的会话分组,使用 `path` 表示层级
|
||
- `passwords`:可复用的已保存密码条目,使用 `ref` 在本文件内引用
|
||
- `ssh_keys`:可复用的已保存私钥条目,使用 `ref` 在本文件内引用
|
||
- `sessions`:要导入的会话列表
|
||
|
||
支持的会话类型:
|
||
|
||
- `ssh`
|
||
- `local_terminal`
|
||
- `telnet`
|
||
- `serial`
|
||
- `rdp`
|
||
|
||
SSH 认证支持:
|
||
|
||
- 直接密码:`"auth": { "mode": "password", "password": "replace-me" }`
|
||
- 已保存密码:`"auth": { "mode": "password", "password_ref": "prod-root-password" }`
|
||
- 已保存密钥:`"auth": { "mode": "key", "key_ref": "ops-ed25519" }`
|
||
- SSH Agent:`"auth": { "mode": "agent" }`
|
||
- 无认证:`"auth": { "mode": "none" }`
|
||
|
||
`password` 与 `password_ref` 二选一;`key` 模式必须提供 `key_ref`。`agent` 模式不会导入私钥,只会在连接时使用当前设备可用的 SSH Agent。`ref` 只在当前 JSON 文件内有效,导入后 NyaTerm 会生成真实的本地 ID。
|
||
|
||
:::warning
|
||
JSON 文件中的密码和私钥是明文。导入后请删除该文件,或至少按敏感文件方式保存。
|
||
:::
|
||
|
||
导入后建议逐条检查:
|
||
|
||
- 主机与端口
|
||
- 用户名
|
||
- 是否需要补充代理 / 跳板机 / OTP 绑定
|
||
- 本地保存的密码或私钥是否已经匹配
|
||
|
||
## 主机密钥策略
|
||
|
||
NyaTerm 会为 SSH 主机维护已知主机记录,并提供三种主机密钥策略:
|
||
|
||
| 策略 | 行为 |
|
||
|------|------|
|
||
| 提示 | 首次连接未知主机时询问是否信任(默认) |
|
||
| 接受 | 自动接受并记录新的主机密钥 |
|
||
| 严格 | 拒绝所有未知主机 |
|
||
|
||
已知主机记录保存在 `~/.nyaterm/nyaterm.redb` 的本地存储中;旧版 `known_hosts` 会在首次启动时迁入。
|
||
|
||
如果你对安全要求较高,建议至少在生产环境中确认主机密钥来源,再决定是否接受。
|
||
|
||
## 什么时候该用 SSH,而不是其他会话类型?
|
||
|
||
优先使用 SSH 的典型场景是:
|
||
|
||
- 你需要远程文件浏览器或 SFTP
|
||
- 你需要 OTP、跳板机、代理、隧道
|
||
- 你需要远程资源监控
|
||
- 你希望把连接长期保存下来复用
|
||
|
||
如果你只是想在 NyaTerm 里开一个本地 shell,请改用 [会话类型](./session-types) 里的 **本地终端**。
|