@hyzyn/dsh-tty 0.18.3 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -108,8 +108,10 @@ const ZSH_HOOKS = [
108
108
  ' __DSH_TTY_IN_CMD=1',
109
109
  ' printf "$__DSH_TTY_FMT_B"',
110
110
  ' }',
111
- ' precmd_functions+=(__dsh_tty_precmd)',
112
- ' preexec_functions+=(__dsh_tty_preexec)',
111
+ ' # 前置插入:后置追加(+=)会让前序钩子的返回码污染 $?,D 标记记到的',
112
+ ' # 就不是用户命令的退出码(preexec 同理前置,保持对称)',
113
+ ' precmd_functions=(__dsh_tty_precmd "${precmd_functions[@]}")',
114
+ ' preexec_functions=(__dsh_tty_preexec "${preexec_functions[@]}")',
113
115
  'fi',
114
116
  '# <<< dsh-tty shell integration <<<',
115
117
  '',
@@ -143,9 +145,13 @@ const BASH_PRELUDE = [
143
145
  ' }',
144
146
  ' __dsh_tty_precmd() {',
145
147
  ' local ec=$?',
146
- ' if [ "$__DSH_TTY_IN_CMD" = "1" ]; then',
147
- ' [ -n "$TMUX" ] && __dsh_tty_capture',
148
- ' printf "$__DSH_TTY_FMT_D" "$ec"; __DSH_TTY_IN_CMD=0; fi',
148
+ ' # D 标记**无条件**发(0.19.0 修):bash ≥4.4 的 B 由 PS0 发,而 PS0 的展开',
149
+ ' # 在子 shell 里 —— 它设不了父 shell 的 __DSH_TTY_IN_CMD,于是守着这个 flag',
150
+ ' # 会让 D 永远不发(实测 ubuntu bash 5:B 到了、D 没到,capture{last} 恒',
151
+ ' # 返回 inProgress、tty_expect 永远超时)。配对交给宿主解析器:没有配对 B 的',
152
+ ' # D 被忽略,所以空回车不会造出假命令。',
153
+ ' [ -n "$TMUX" ] && __dsh_tty_capture',
154
+ ' printf "$__DSH_TTY_FMT_D" "$ec"; __DSH_TTY_IN_CMD=0',
149
155
  ' printf "$__DSH_TTY_FMT_A"',
150
156
  ' printf "$__DSH_TTY_FMT_CWD" "${HOSTNAME}" "${PWD}"',
151
157
  ' }',
@@ -162,8 +168,10 @@ function ensureZshStubDir() {
162
168
  try {
163
169
  const dir = join(pluginRuntimeDir(), 'shell', 'zsh');
164
170
  // 桩只做「source 用户原文件 + 追加钩子」;DSH_TTY_ORIG_ZDOTDIR 在包装层里
165
- // 固化为用户原 ZDOTDIR(无则 $HOME),保证用户 rc 链路不变
166
- for (const name of ['.zshenv', '.zprofile', '.zlogin']) {
171
+ // 固化为用户原 ZDOTDIR(无则 $HOME),保证用户 rc 链路不变。
172
+ // .zlogout 也要链(0.19.0):ZDOTDIR 指到桩目录后,登录 shell 退出时只读
173
+ // ZDOTDIR 下的 .zlogout——缺了它用户的退出钩子被静默吞掉
174
+ for (const name of ['.zshenv', '.zprofile', '.zlogin', '.zlogout']) {
167
175
  writeIfChanged(join(dir, name), [
168
176
  '# dsh-tty shell integration stub (chain to user file)',
169
177
  '[ -f "$DSH_TTY_ORIG_ZDOTDIR/' + name + '" ] && source "$DSH_TTY_ORIG_ZDOTDIR/' + name + '"',
@@ -202,12 +210,14 @@ function ensureBashStubRc() {
202
210
  " *'133;B'*) ;;",
203
211
  ' *) PS0="$__DSH_TTY_FMT_B""$PS0" ;;',
204
212
  ' esac',
205
- ' # PROMPT_COMMAND 挂钩:兼容字符串与数组(bash 5.1+)两种形态',
213
+ ' # PROMPT_COMMAND 挂钩:兼容字符串与数组(bash 5.1+)两种形态。',
214
+ ' # 两种形态都必须**前置**:后置追加会让前序条目的返回码污染 $?,',
215
+ ' # D 标记记到的就不是用户命令的退出码(数组形态的 += 恰好加在末尾)',
206
216
  ' case "$(declare -p PROMPT_COMMAND 2>/dev/null)" in',
207
217
  ' "declare -a"*)',
208
218
  ' case "${PROMPT_COMMAND[*]}" in',
209
219
  ' *__dsh_tty_precmd*) ;;',
210
- ' *) PROMPT_COMMAND+=("__dsh_tty_precmd") ;;',
220
+ ' *) PROMPT_COMMAND=("__dsh_tty_precmd" "${PROMPT_COMMAND[@]}") ;;',
211
221
  ' esac ;;',
212
222
  ' *)',
213
223
  ' case "${PROMPT_COMMAND:-}" in',
@@ -306,11 +316,21 @@ export function isPowerShellShell(shell) {
306
316
  function buildWindowsShellSpawn(shell) {
307
317
  return { argv: isPowerShellShell(shell) ? [shell, '-NoLogo'] : [shell], env: {} };
308
318
  }
309
- /** Windows 宿主的「跑一条命令」计划:cmd 走 `/c`,PowerShell 走 `-Command`(都不再包 export/exec)。 */
319
+ /** Windows 宿主的「跑一条命令」计划:按 shell 家族选参数(0.19.0 前一律 /c,Git Bash / WSL 静默失败)。 */
310
320
  function buildWindowsCommandSpawn(shell, command) {
311
- return isPowerShellShell(shell)
312
- ? { argv: [shell, '-NoLogo', '-Command', command], env: {} }
313
- : { argv: [shell, '/c', command], env: {} };
321
+ if (isPowerShellShell(shell)) {
322
+ return { argv: [shell, '-NoLogo', '-Command', command], env: {} };
323
+ }
324
+ const kind = shell.split(/[\\/]/).pop()?.toLowerCase() ?? '';
325
+ // Git Bash 等 POSIX shell 认 -c
326
+ if (kind === 'bash.exe' || kind === 'bash' || kind === 'sh.exe' || kind === 'sh' || kind === 'zsh.exe' || kind === 'zsh') {
327
+ return { argv: [shell, '-c', command], env: {} };
328
+ }
329
+ // WSL:-e 直跑默认发行版的 sh,再由它 -c(wsl.exe 自身不认 /c / -c)
330
+ if (kind === 'wsl.exe' || kind === 'wsl') {
331
+ return { argv: [shell, '-e', 'sh', '-c', command], env: {} };
332
+ }
333
+ return { argv: [shell, '/c', command], env: {} };
314
334
  }
315
335
  export function buildShellSpawn(shell, term, colorTerm, integration, platform = process.platform) {
316
336
  if (platform === 'win32')
@@ -1 +1 @@
1
- {"version":3,"file":"shell-integration.js","sourceRoot":"","sources":["../src/shell-integration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell-integration.js","sourceRoot":"","sources":["../src/shell-integration.ts"],"names":[],"mappings":"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"}
package/lib/ssh.d.ts CHANGED
@@ -42,12 +42,17 @@ export interface TermHandle {
42
42
  /** spawn 后注入终端的灰字提示(如远程无 tmux 降级为普通会话)。 */
43
43
  startupNotice?: string;
44
44
  }
45
- /** TOFU 主机指纹记录。 */
45
+ /**
46
+ * TOFU 主机指纹记录(0.19.0 起一机多指纹):known_hosts 里同一 host:port 常
47
+ * 同时有 ssh-rsa 与 ssh-ed25519 两行,而 ssh2 优先协商 ed25519——只留一条
48
+ * 指纹时,RSA 行在前的老机器导入后必然「指纹不符 → 假 MITM 告警」。集合任一
49
+ * 命中即放行;同机指纹总量有上限(防止无界增长),上限内不做算法识别。
50
+ */
46
51
  export interface HostKeyRecord {
47
52
  host: string;
48
53
  port: number;
49
- /** hostVerifier 收到的原样 sha256 十六进制指纹。 */
50
- fingerprint: string;
54
+ /** hostVerifier 收到的原样 sha256 十六进制指纹(多把钥匙 = 多个)。 */
55
+ fingerprints: string[];
51
56
  }
52
57
  /** 内联 SSH 连接规格(ws 帧或连接簿条目共用)。 */
53
58
  export interface SshSpec {
@@ -97,11 +102,14 @@ export interface SshSpawnOptions {
97
102
  */
98
103
  command?: string;
99
104
  }
100
- /** 主机指纹钉扎存储(宿主半体实现为 LiveConfig + settings 持久化)。 */
105
+ /**
106
+ * 主机指纹钉扎存储(宿主半体实现为 LiveConfig + settings 持久化)。
107
+ * get 返回 undefined 表示该 host:port 从未记录;返回数组(≥1 条)时任一命中放行。
108
+ */
101
109
  export interface HostKeyStore {
102
- /** 已记录的指纹(hostVerifier 收到的原样十六进制串);未记录返回 undefined。 */
103
- get(host: string, port: number): string | undefined;
104
- /** 首次连接握手时记录指纹。 */
110
+ /** 已记录的指纹集合(hostVerifier 收到的原样十六进制串);未记录返回 undefined。 */
111
+ get(host: string, port: number): string[] | undefined;
112
+ /** 握手时记录指纹(已存在该 host:port 的记录则并入集合)。 */
105
113
  record(host: string, port: number, fingerprint: string): void;
106
114
  }
107
115
  /**
@@ -141,6 +149,12 @@ declare function expandHome(path: string): string;
141
149
  export { expandHome };
142
150
  /** 展示用目标串:user@host(非默认端口时带 :port)。 */
143
151
  export declare function sshTarget(spec: SshSpec): string;
152
+ /**
153
+ * 把 ssh2 的底层错误消息分类为人类可读诊断(0.19.0 自 probe.ts 上移至此统一
154
+ * 导出——终端 / 隧道 / 探测三条路径共用同一套文案,不再透传原始英文)。
155
+ * 分类串本身已含关键字段;无法识别时原样返回。
156
+ */
157
+ export declare function classifyError(message: string): string;
144
158
  /**
145
159
  * 构造连接配置(认证三态 + keepalive + hostHash);spawnSsh / probeSsh / SFTP / 隧道共用。
146
160
  *
package/lib/ssh.js CHANGED
@@ -54,11 +54,16 @@ export async function resolveSecretVia(provider, value) {
54
54
  return value;
55
55
  const name = value.slice(4);
56
56
  let providerError = null;
57
+ /** provider 明确找到了该引用(哪怕值是空串)——与「引用不存在」分开报 */
58
+ let providerFound = false;
57
59
  if (provider !== null && provider !== undefined && typeof provider.resolve === 'function') {
58
60
  try {
59
61
  const resolved = await provider.resolve(name);
60
- if (resolved !== null && resolved !== undefined && typeof resolved.value === 'string' && resolved.value !== '') {
61
- return resolved.value;
62
+ if (resolved !== null && resolved !== undefined) {
63
+ providerFound = true;
64
+ if (typeof resolved.value === 'string' && resolved.value !== '') {
65
+ return resolved.value;
66
+ }
62
67
  }
63
68
  }
64
69
  catch (error) {
@@ -68,6 +73,11 @@ export async function resolveSecretVia(provider, value) {
68
73
  const fromEnv = process.env[name];
69
74
  if (fromEnv !== undefined && fromEnv !== '')
70
75
  return fromEnv;
76
+ // 「存在但值为空」单独报:报成「未设置」会把用户引去新建同名引用——那只会再失败一次
77
+ if (providerFound || fromEnv === '') {
78
+ const detail = providerError === null ? '' : `(凭据服务报错:${providerError})`;
79
+ throw new Error(`凭据 ${name} 的值是空串${detail}——请在凭据存储或环境变量里补上实际值,新建同名引用解决不了`);
80
+ }
71
81
  const detail = providerError === null ? '' : `(凭据服务报错:${providerError})`;
72
82
  const missing = provider === null ? '凭据服务不可用,' : '';
73
83
  throw new Error(`凭据未设置:${name}${detail} —— ${missing}环境变量里也没有`);
@@ -90,6 +100,41 @@ export function sshTarget(spec) {
90
100
  const port = spec.port ?? 22;
91
101
  return `${spec.username}@${spec.host}${port === 22 ? '' : ':' + String(port)}`;
92
102
  }
103
+ /**
104
+ * 把 ssh2 的底层错误消息分类为人类可读诊断(0.19.0 自 probe.ts 上移至此统一
105
+ * 导出——终端 / 隧道 / 探测三条路径共用同一套文案,不再透传原始英文)。
106
+ * 分类串本身已含关键字段;无法识别时原样返回。
107
+ */
108
+ export function classifyError(message) {
109
+ if (message === 'Host key verification failed') {
110
+ return '主机密钥校验失败(TOFU 不匹配,见 hostkey 指引)';
111
+ }
112
+ if (message.includes('All configured authentication methods failed')) {
113
+ return '认证被拒绝:所有认证方式均失败(用户名/密码/密钥是否正确,或服务端是否允许该认证方式)';
114
+ }
115
+ if (message.includes('Timed out')) {
116
+ return '超时:主机无响应或认证协商超时(检查地址 / 端口 / 防火墙 / 网络)';
117
+ }
118
+ const lower = message.toLowerCase();
119
+ if (lower.includes('econnrefused'))
120
+ return '连接被拒绝(ECONNREFUSED):端口未监听或服务未启动';
121
+ if (lower.includes('enetunreach'))
122
+ return '网络不可达(ENETUNREACH):路由不通或主机离线';
123
+ if (lower.includes('ehostunreach'))
124
+ return '主机不可达(EHOSTUNREACH)';
125
+ if (lower.includes('eai_again') || lower.includes('eai_noname') || lower.includes('enotfound'))
126
+ return 'DNS 解析失败:主机名无法解析';
127
+ if (lower.includes('getaddrinfo'))
128
+ return 'DNS 解析失败:主机名无法解析';
129
+ if (lower.includes('unable to exchange encryption keys') || lower.includes('encryption') || lower.includes('kex')) {
130
+ return '密钥交换失败:服务端可能不是 SSH 服务,或加密算法不兼容';
131
+ }
132
+ if (lower.includes('keepalive'))
133
+ return '连接保活超时(keepalive)';
134
+ if (lower.includes('protocol'))
135
+ return '协议错误:' + message;
136
+ return message;
137
+ }
93
138
  /* ------------------------------------------------------------------ *
94
139
  * 连接与 channel 包装
95
140
  * ------------------------------------------------------------------ */
@@ -113,6 +158,11 @@ export async function buildConnectConfig(spec) {
113
158
  hostHash: 'sha256',
114
159
  };
115
160
  if (auth === 'agent') {
161
+ // 预检(0.19.0):缺 SSH_AUTH_SOCK 时 ssh2 只会报「All configured
162
+ // authentication methods failed」,用户根本想不到是 agent 没跑
163
+ if (process.env.SSH_AUTH_SOCK === undefined || process.env.SSH_AUTH_SOCK === '') {
164
+ throw new Error('auth=agent 需要 SSH_AUTH_SOCK(本机未运行 ssh-agent 或变量未设置);在终端面板宿主环境起 agent,或改用 key / password 认证');
165
+ }
116
166
  base.agent = process.env.SSH_AUTH_SOCK;
117
167
  }
118
168
  else if (auth === 'key') {
@@ -147,17 +197,19 @@ export function applyHostKeyPolicy(options) {
147
197
  let hostKeyMismatch = null;
148
198
  connectConfig.hostVerifier = (hash) => {
149
199
  const known = store?.get(spec.host, port);
150
- if (known === undefined) {
200
+ if (known === undefined || known.length === 0) {
151
201
  store?.record(spec.host, port, hash);
152
202
  logger?.info(`[dsh-tty] ssh ${target} 首次连接,已记录 host key 指纹 sha256:${hash}(TOFU)`);
153
203
  return true;
154
204
  }
155
- if (known === hash) {
156
- logger?.info(`[dsh-tty] ssh ${target} host key 指纹匹配(sha256:${hash})`);
205
+ if (known.includes(hash)) {
206
+ logger?.info(`[dsh-tty] ssh ${target} host key 指纹匹配(sha256:${hash},该主机共记录 ${String(known.length)} 把钥匙)`);
157
207
  return true;
158
208
  }
209
+ const shown = known.slice(0, 3).map((f) => `sha256:${f}`).join(' / ');
210
+ const more = known.length > 3 ? ` 等 ${String(known.length)} 把` : '';
159
211
  hostKeyMismatch =
160
- `SSH 主机密钥指纹变更:${target} 已记录 sha256:${known},本次为 sha256:${hash}。` +
212
+ `SSH 主机密钥指纹变更:${target} 已记录 ${shown}${more},本次为 sha256:${hash}。` +
161
213
  '可能是主机重装或换钥匙,也可能是中间人(MITM)冒充;确认安全后,到 插件配置 → 终端面板 → SSH 主机密钥记录 删除该主机再重连。';
162
214
  logger?.warn(`[dsh-tty] ${hostKeyMismatch}`);
163
215
  return false;
@@ -210,29 +262,71 @@ export async function spawnSsh(spec, options) {
210
262
  let tmuxUsed = false;
211
263
  const channel = await new Promise((resolve, reject) => {
212
264
  let settled = false;
265
+ let watchdog = null;
266
+ const clearWatchdog = () => {
267
+ if (watchdog !== null) {
268
+ clearTimeout(watchdog);
269
+ watchdog = null;
270
+ }
271
+ };
272
+ // channel 打开兜底(0.19.0):readyTimeout 只覆盖到认证成功;对端不响应
273
+ // channel-open(堡垒机 / sshd 限制并发 channel)时 await 永不 settle——
274
+ // 连接活着、keepalive 正常,用户端「Connecting …」常驻且拿不到 handle
275
+ // 去取消。每个 channel 尝试挂 15s 计时(与 tmux 探测的 10s 同思路),
276
+ // 超时断开连接并明确报错。
277
+ const armWatchdog = (what) => {
278
+ clearWatchdog();
279
+ watchdog = setTimeout(() => {
280
+ if (settled)
281
+ return;
282
+ settled = true;
283
+ try {
284
+ conn.end();
285
+ }
286
+ catch {
287
+ /* 已断开 */
288
+ }
289
+ reject(new Error(`SSH channel 打开超时(${what}15s 无响应):对端可能限制了并发 channel 数或不响应,连接已断开`));
290
+ }, 15_000);
291
+ watchdog.unref?.();
292
+ };
293
+ const settleOk = (ch) => {
294
+ if (settled)
295
+ return;
296
+ settled = true;
297
+ clearWatchdog();
298
+ resolve(ch);
299
+ };
300
+ const settleErr = (error) => {
301
+ if (settled)
302
+ return;
303
+ settled = true;
304
+ clearWatchdog();
305
+ reject(error);
306
+ };
213
307
  const openShell = () => {
308
+ armWatchdog('shell channel ');
214
309
  // agentForward 走 per-channel 请求(@types/ssh2 的 ShellOptions 未声明,
215
310
  // 运行时支持;仅在本机 agent 存在时生效,见 buildConnectConfig)
216
311
  conn.shell({ term: options.term, cols: options.cols, rows: options.rows, agentForward: spec.agentForward === true }, (error, ch) => {
217
- settled = true;
218
312
  if (error !== undefined && error !== null) {
219
313
  conn.end();
220
- reject(new Error(`shell channel 打开失败: ${error.message}`));
314
+ settleErr(new Error(`shell channel 打开失败: ${error.message}`));
221
315
  return;
222
316
  }
223
- resolve(ch);
317
+ settleOk(ch);
224
318
  });
225
319
  };
226
320
  /** 自定义命令(0.14.0):`conn.exec(command, {pty})`,与 tmux 分支同形。 */
227
321
  const openCommand = () => {
322
+ armWatchdog('命令 channel ');
228
323
  conn.exec(options.command ?? '', { pty: { term: options.term, cols: options.cols, rows: options.rows } }, (error, ch) => {
229
- settled = true;
230
324
  if (error !== undefined && error !== null) {
231
325
  conn.end();
232
- reject(new Error(`远程命令启动失败: ${error.message}`));
326
+ settleErr(new Error(`远程命令启动失败: ${error.message}`));
233
327
  return;
234
328
  }
235
- resolve(ch);
329
+ settleOk(ch);
236
330
  });
237
331
  };
238
332
  /** 持久会话:远程 `exec tmux new-session -A`(pty channel,语义与 shell 一致)。 */
@@ -245,6 +339,7 @@ export async function spawnSsh(spec, options) {
245
339
  "';' set-option -g history-limit 20000",
246
340
  "';' set-option -ga terminal-overrides ,*:RGB",
247
341
  ].join(' ');
342
+ armWatchdog('tmux channel ');
248
343
  conn.exec(cmd, { pty: { term: options.term, cols: options.cols, rows: options.rows } }, (error, ch) => {
249
344
  if (error !== undefined && error !== null) {
250
345
  // tmux 启动失败(存在但异常):连接已建立,降级普通 shell 优于直接报错
@@ -253,9 +348,8 @@ export async function spawnSsh(spec, options) {
253
348
  openShell();
254
349
  return;
255
350
  }
256
- settled = true;
257
351
  tmuxUsed = true;
258
- resolve(ch);
352
+ settleOk(ch);
259
353
  });
260
354
  };
261
355
  const openWithPersist = () => {
@@ -303,12 +397,11 @@ export async function spawnSsh(spec, options) {
303
397
  });
304
398
  conn.on('error', (error) => {
305
399
  if (!settled) {
306
- settled = true;
307
400
  const mismatch = policy.mismatchMessage();
308
401
  if (mismatch !== null)
309
- reject(new Error(mismatch));
402
+ settleErr(new Error(mismatch));
310
403
  else
311
- reject(new Error(`SSH 连接失败(${target}): ${error.message}`));
404
+ settleErr(new Error(`SSH 连接失败(${target}): ${classifyError(error.message)}`));
312
405
  }
313
406
  else {
314
407
  logger?.warn(`[dsh-tty] ssh ${target} 连接错误: ${error.message}`);
@@ -316,6 +409,8 @@ export async function spawnSsh(spec, options) {
316
409
  }
317
410
  });
318
411
  conn.on('close', () => {
412
+ // channel 建立前连接就断了:不能让 await 悬挂(0.19.0 兜底)
413
+ settleErr(new Error(`SSH 连接已关闭(${target},channel 未建立)`));
319
414
  finish();
320
415
  });
321
416
  if (connectConfig.tryKeyboard === true) {
@@ -328,7 +423,7 @@ export async function spawnSsh(spec, options) {
328
423
  conn.connect(connectConfig);
329
424
  }
330
425
  catch (error) {
331
- reject(error instanceof Error ? error : new Error(String(error)));
426
+ settleErr(error instanceof Error ? error : new Error(String(error)));
332
427
  }
333
428
  });
334
429
  channel.on('data', (chunk) => {
package/lib/ssh.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh.js","sourceRoot":"","sources":["../src/ssh.ts"],"names":[],"mappings":"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"}
package/lib/tunnels.js CHANGED
@@ -19,7 +19,7 @@
19
19
  */
20
20
  import net from 'node:net';
21
21
  import { Client } from 'ssh2';
22
- import { applyHostKeyPolicy, buildConnectConfig } from './ssh.js';
22
+ import { applyHostKeyPolicy, buildConnectConfig, classifyError } from './ssh.js';
23
23
  const MAX_RETRY_DELAY_MS = 15_000;
24
24
  function signatureOf(spec) {
25
25
  return JSON.stringify(spec);
@@ -70,6 +70,7 @@ export class TunnelManager {
70
70
  retryAttempt: 0,
71
71
  dead: false,
72
72
  fatal: false,
73
+ live: new Set(),
73
74
  };
74
75
  this.tunnels.set(spec.name, rt);
75
76
  if (spec.enabled)
@@ -134,6 +135,30 @@ export class TunnelManager {
134
135
  }
135
136
  rt.conn = null;
136
137
  rt.ready = false;
138
+ // 在途转发一并销毁(0.19.0):停用/改规格时的在途 socket 与 channel
139
+ // 不再「不可见、不可控」。end/close/destroy 按对象类型择一可用。
140
+ for (const entry of rt.live) {
141
+ const anyEntry = entry;
142
+ try {
143
+ anyEntry.end?.();
144
+ }
145
+ catch {
146
+ /* 已关闭 */
147
+ }
148
+ try {
149
+ anyEntry.close?.();
150
+ }
151
+ catch {
152
+ /* 已关闭 */
153
+ }
154
+ try {
155
+ anyEntry.destroy?.();
156
+ }
157
+ catch {
158
+ /* 已关闭 */
159
+ }
160
+ }
161
+ rt.live.clear();
137
162
  rt.connections = 0;
138
163
  rt.lastForwardError = null;
139
164
  rt.state = 'stopped';
@@ -146,7 +171,10 @@ export class TunnelManager {
146
171
  const spec = rt.spec;
147
172
  const book = this.resolveBook(spec.bookName);
148
173
  if (book === undefined) {
149
- this.scheduleRetry(rt, `连接簿中不存在条目: ${spec.bookName}`);
174
+ // 配置级 fatal(0.19.0):条目被删/改名后只有配置本身能修复,走重试只会
175
+ // 永远失败循环(每 ≤15s 建连一次);failTunnel 后 reconcile 收到更新
176
+ // (bookName 改回/条目恢复)会按新签名重建隧道
177
+ this.failTunnel(rt, `连接簿中不存在条目: ${spec.bookName}(条目被删除或改名)——在 设置 → 插件 → 终端面板 → 端口转发 里更正 bookName 或恢复条目后保存`);
150
178
  return;
151
179
  }
152
180
  const sshSpec = {
@@ -197,7 +225,7 @@ export class TunnelManager {
197
225
  conn.on('error', (error) => {
198
226
  if (rt.dead || rt.conn !== conn)
199
227
  return;
200
- this.scheduleRetry(rt, policy.mismatchMessage() ?? `SSH 连接失败(${target}): ${error.message}`);
228
+ this.scheduleRetry(rt, policy.mismatchMessage() ?? `SSH 连接失败(${target}): ${classifyError(error.message)}`);
201
229
  });
202
230
  conn.on('close', () => {
203
231
  if (rt.conn !== conn)
@@ -233,12 +261,24 @@ export class TunnelManager {
233
261
  rt.totalConnections += 1;
234
262
  rt.connections += 1;
235
263
  const stream = accept();
264
+ rt.live.add(stream);
236
265
  const local = net.connect({ host: spec.localTargetHost?.trim() || '127.0.0.1', port: spec.localTargetPort ?? 0 }, () => {
237
266
  stream.pipe(local);
238
267
  local.pipe(stream);
239
268
  });
240
- const teardown = () => {
269
+ rt.live.add(local);
270
+ // 计数恰好一次:stream 与 local 任何一侧结束都算这条转发完了
271
+ let counted = true;
272
+ const finish = () => {
273
+ if (!counted)
274
+ return;
275
+ counted = false;
241
276
  rt.connections = Math.max(0, rt.connections - 1);
277
+ rt.live.delete(stream);
278
+ rt.live.delete(local);
279
+ };
280
+ const kill = () => {
281
+ finish();
242
282
  try {
243
283
  stream.end();
244
284
  }
@@ -252,9 +292,8 @@ export class TunnelManager {
252
292
  /* 已关闭 */
253
293
  }
254
294
  };
255
- stream.on('close', teardown);
256
- local.on('close', teardown);
257
- const kill = () => teardown();
295
+ stream.on('close', finish);
296
+ local.on('close', finish);
258
297
  stream.on('error', kill);
259
298
  local.on('error', kill);
260
299
  }
@@ -268,20 +307,33 @@ export class TunnelManager {
268
307
  }
269
308
  rt.totalConnections += 1;
270
309
  rt.connections += 1;
310
+ rt.live.add(socket);
311
+ let channel = null;
312
+ // 计数恰好一次:forwardOut 失败(原实现漏减、计数虚高)与正常收尾共用
313
+ let counted = true;
314
+ const finish = () => {
315
+ if (!counted)
316
+ return;
317
+ counted = false;
318
+ rt.connections = Math.max(0, rt.connections - 1);
319
+ rt.live.delete(socket);
320
+ if (channel !== null)
321
+ rt.live.delete(channel);
322
+ };
271
323
  conn.forwardOut('127.0.0.1', 0, spec.remoteHost?.trim() ?? '', spec.remotePort ?? 0, (error, stream) => {
272
324
  if (error !== undefined && error !== null) {
273
325
  rt.lastForwardError = `目标 ${spec.remoteHost?.trim() ?? '?'}:${String(spec.remotePort ?? 0)} 拨号失败: ${error.message}`;
274
326
  this.logger.warn(`[dsh-tty] 隧道 ${rt.spec.name} forwardOut 失败: ${error.message}`);
327
+ finish();
275
328
  socket.destroy();
276
329
  return;
277
330
  }
278
- const teardown = () => {
279
- rt.connections = Math.max(0, rt.connections - 1);
280
- };
281
- stream.on('close', teardown);
282
- socket.pipe(stream);
283
- stream.pipe(socket);
331
+ channel = stream;
332
+ rt.live.add(stream);
333
+ stream.on('close', finish);
334
+ socket.on('close', finish);
284
335
  const kill = () => {
336
+ finish();
285
337
  try {
286
338
  socket.destroy();
287
339
  }
@@ -297,6 +349,8 @@ export class TunnelManager {
297
349
  };
298
350
  socket.on('error', kill);
299
351
  stream.on('error', kill);
352
+ socket.pipe(stream);
353
+ stream.pipe(socket);
300
354
  });
301
355
  }
302
356
  /** 失败且不再自动重试(需要人工介入:如远程端口被占、本地监听端口非法/无权限)。 */