diff --git a/packages/plugins/plugin-lib/src/ssh/ssh-access.ts b/packages/plugins/plugin-lib/src/ssh/ssh-access.ts index 882071e4..4d20696d 100644 --- a/packages/plugins/plugin-lib/src/ssh/ssh-access.ts +++ b/packages/plugins/plugin-lib/src/ssh/ssh-access.ts @@ -64,6 +64,22 @@ export class SshAccess extends BaseAccess { }) passphrase!: string; + @AccessInput({ + title: "脚本类型", + helper: "bash 、sh 、fish", + component: { + name: "a-select", + vModel: "value", + options: [ + { value: "default", label: "默认" }, + { value: "sh", label: "sh" }, + { value: "bash", label: "bash" }, + { value: "fish", label: "fish(不支持set -e)" }, + ], + }, + }) + scriptType: string; + @AccessInput({ title: "伪终端", helper: "如果登录报错:all authentication methods failed,可以尝试开启伪终端模式进行keyboard-interactive方式登录\n开启后对日志输出有一定的影响", diff --git a/packages/plugins/plugin-lib/src/ssh/ssh.ts b/packages/plugins/plugin-lib/src/ssh/ssh.ts index 32d83f30..197ebfc1 100644 --- a/packages/plugins/plugin-lib/src/ssh/ssh.ts +++ b/packages/plugins/plugin-lib/src/ssh/ssh.ts @@ -543,8 +543,16 @@ export class SshClient { } } - if (isLinux && options.stopOnError !== false) { - script = "set -e\n" + script; + if (isLinux) { + if (options.connectConf.scriptType == "bash") { + script = "#!/usr/bin/env bash \n" + script; + } else if (options.connectConf.scriptType == "sh") { + script = "#!/bin/sh\n" + script; + } + + if (options.connectConf.scriptType != "fish" && options.stopOnError !== false) { + script = "set -e\n" + script; + } } return await conn.exec(script as string, { throwOnStdErr });