diff --git a/packages/plugins/plugin-lib/src/ssh/ssh-access.ts b/packages/plugins/plugin-lib/src/ssh/ssh-access.ts index 15bd6fa8..3af65770 100644 --- a/packages/plugins/plugin-lib/src/ssh/ssh-access.ts +++ b/packages/plugins/plugin-lib/src/ssh/ssh-access.ts @@ -86,6 +86,15 @@ export class SshAccess extends BaseAccess { }) socksProxy!: string; + @AccessInput({ + title: "超时时间", + helper: "执行命令的超时时间,单位秒,默认10分钟", + component: { + name: "a-input-number", + }, + }) + timeout: number; + @AccessInput({ title: "是否Windows", helper: "如果是Windows主机,请勾选此项\n并且需要windows[安装OpenSSH](https://certd.docmirror.cn/guide/use/host/windows.html)", diff --git a/packages/plugins/plugin-lib/src/ssh/ssh.ts b/packages/plugins/plugin-lib/src/ssh/ssh.ts index d148d8f1..7e6e14aa 100644 --- a/packages/plugins/plugin-lib/src/ssh/ssh.ts +++ b/packages/plugins/plugin-lib/src/ssh/ssh.ts @@ -588,10 +588,15 @@ export class SshClient { } throw e; } - + let timeoutId = null; try { + timeoutId = setTimeout(() => { + this.logger.info("执行超时,断开连接"); + conn.end(); + }, 1000 * (connectConf.timeout || 600)); return await callable(conn); } finally { + clearTimeout(timeoutId); conn.end(); } }