diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormLocalConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormLocalConfig.tsx
index bd1cced6..1ca2fe8c 100644
--- a/ui/src/components/workflow/node/DeployNodeConfigFormLocalConfig.tsx
+++ b/ui/src/components/workflow/node/DeployNodeConfigFormLocalConfig.tsx
@@ -134,7 +134,24 @@ const DeployNodeConfigFormLocalConfig = ({ form: formInst, formName, disabled, i
     }
   };
 
-  const handlePresetScriptClick = (key: string) => {
+  const handlePresetPreScriptClick = (key: string) => {
+    switch (key) {
+      case "backup_files":
+        {
+          formInst.setFieldValue("shellEnv", SHELLENV_SH);
+          formInst.setFieldValue(
+            "preCommand",
+            `# 请将以下路径替换为实际值
+cp "${formInst.getFieldValue("certPath")}" "${formInst.getFieldValue("certPath")}.bak" 2>/dev/null || :
+cp "${formInst.getFieldValue("keyPath")}" "${formInst.getFieldValue("keyPath")}.bak" 2>/dev/null || :
+            `.trim()
+          );
+        }
+        break;
+    }
+  };
+
+  const handlePresetPostScriptClick = (key: string) => {
     switch (key) {
       case "reload_nginx":
         {
@@ -149,8 +166,8 @@ const DeployNodeConfigFormLocalConfig = ({ form: formInst, formName, disabled, i
           formInst.setFieldValue(
             "postCommand",
             `# 请将以下变量替换为实际值
-$pfxPath = "<your-pfx-path>" # PFX 文件路径
-$pfxPassword = "<your-pfx-password>" # PFX 密码
+$pfxPath = "${formInst.getFieldValue("certPath")}" # PFX 文件路径
+$pfxPassword = "${formInst.getFieldValue("pfxPassword")}" # PFX 密码
 $siteName = "<your-site-name>" # IIS 网站名称
 $domain = "<your-domain-name>" # 域名
 $ipaddr = "<your-binding-ip>"  # 绑定 IP,“*”表示所有 IP 绑定
@@ -186,8 +203,8 @@ Remove-Item -Path "$pfxPath" -Force
           formInst.setFieldValue(
             "postCommand",
             `# 请将以下变量替换为实际值
-$pfxPath = "<your-pfx-path>" # PFX 文件路径
-$pfxPassword = "<your-pfx-password>" # PFX 密码
+$pfxPath = "${formInst.getFieldValue("certPath")}" # PFX 文件路径
+$pfxPassword = "${formInst.getFieldValue("pfxPassword")}" # PFX 密码
 $ipaddr = "<your-binding-ip>"  # 绑定 IP,“0.0.0.0”表示所有 IP 绑定,可填入域名。
 $port = "<your-binding-port>"  # 绑定端口
 
@@ -208,14 +225,15 @@ Remove-Item -Path "$pfxPath" -Force
           );
         }
         break;
+
       case "binding_rdp":
         {
           formInst.setFieldValue("shellEnv", SHELLENV_POWERSHELL);
           formInst.setFieldValue(
             "postCommand",
             `# 请将以下变量替换为实际值
-$pfxPath = "<your-pfx-path>" # PFX 文件路径
-$pfxPassword = "<your-pfx-password>" # PFX 密码
+$pfxPath = "${formInst.getFieldValue("certPath")}" # PFX 文件路径
+$pfxPassword = "${formInst.getFieldValue("pfxPassword")}" # PFX 密码
 
 # 导入证书到本地计算机的个人存储区
 $cert = Import-PfxCertificate -FilePath "$pfxPath" -CertStoreLocation Cert:\\LocalMachine\\My -Password (ConvertTo-SecureString -String "$pfxPassword" -AsPlainText -Force) -Exportable
@@ -332,8 +350,36 @@ Set-ItemProperty -Path $rdpCertPath -Name "SSLCertificateSHA1Hash" -Value "$thum
         </Select>
       </Form.Item>
 
-      <Form.Item name="preCommand" label={t("workflow_node.deploy.form.local_pre_command.label")} rules={[formRule]}>
-        <Input.TextArea autoSize={{ minRows: 1, maxRows: 5 }} placeholder={t("workflow_node.deploy.form.local_pre_command.placeholder")} />
+      <Form.Item className="mb-0">
+        <label className="mb-1 block">
+          <div className="flex w-full items-center justify-between gap-4">
+            <div className="max-w-full grow truncate">
+              <span>{t("workflow_node.deploy.form.local_pre_command.label")}</span>
+            </div>
+            <div className="text-right">
+              <Dropdown
+                menu={{
+                  items: [
+                    {
+                      key: "backup_files",
+                      label: t("workflow_node.deploy.form.local_preset_scripts.option.backup_files.label"),
+                      onClick: () => handlePresetPreScriptClick("backup_files"),
+                    },
+                  ],
+                }}
+                trigger={["click"]}
+              >
+                <Button size="small" type="link">
+                  {t("workflow_node.deploy.form.local_preset_scripts.button")}
+                  <DownOutlinedIcon />
+                </Button>
+              </Dropdown>
+            </div>
+          </div>
+        </label>
+        <Form.Item name="preCommand" rules={[formRule]}>
+          <Input.TextArea autoSize={{ minRows: 1, maxRows: 5 }} placeholder={t("workflow_node.deploy.form.local_pre_command.placeholder")} />
+        </Form.Item>
       </Form.Item>
 
       <Form.Item className="mb-0">
@@ -349,22 +395,22 @@ Set-ItemProperty -Path $rdpCertPath -Name "SSLCertificateSHA1Hash" -Value "$thum
                     {
                       key: "reload_nginx",
                       label: t("workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label"),
-                      onClick: () => handlePresetScriptClick("reload_nginx"),
+                      onClick: () => handlePresetPostScriptClick("reload_nginx"),
                     },
                     {
                       key: "binding_iis",
                       label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label"),
-                      onClick: () => handlePresetScriptClick("binding_iis"),
+                      onClick: () => handlePresetPostScriptClick("binding_iis"),
                     },
                     {
                       key: "binding_netsh",
                       label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label"),
-                      onClick: () => handlePresetScriptClick("binding_netsh"),
+                      onClick: () => handlePresetPostScriptClick("binding_netsh"),
                     },
                     {
                       key: "binding_rdp",
                       label: t("workflow_node.deploy.form.local_preset_scripts.option.binding_rdp.label"),
-                      onClick: () => handlePresetScriptClick("binding_rdp"),
+                      onClick: () => handlePresetPostScriptClick("binding_rdp"),
                     },
                   ],
                 }}
diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormSSHConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormSSHConfig.tsx
index 1e176d7b..65a7df7b 100644
--- a/ui/src/components/workflow/node/DeployNodeConfigFormSSHConfig.tsx
+++ b/ui/src/components/workflow/node/DeployNodeConfigFormSSHConfig.tsx
@@ -127,7 +127,23 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini
     }
   };
 
-  const handlePresetScriptClick = (key: string) => {
+  const handlePresetPreScriptClick = (key: string) => {
+    switch (key) {
+      case "backup_files":
+        {
+          formInst.setFieldValue(
+            "preCommand",
+            `# 请将以下路径替换为实际值
+cp "${formInst.getFieldValue("certPath")}" "${formInst.getFieldValue("certPath")}.bak" 2>/dev/null || :
+cp "${formInst.getFieldValue("keyPath")}" "${formInst.getFieldValue("keyPath")}.bak" 2>/dev/null || :
+            `.trim()
+          );
+        }
+        break;
+    }
+  };
+
+  const handlePresetPostScriptClick = (key: string) => {
     switch (key) {
       case "reload_nginx":
         {
@@ -228,8 +244,36 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini
         <Select options={[{ value: t("workflow_node.deploy.form.ssh_shell_env.value") }]} value={t("workflow_node.deploy.form.ssh_shell_env.value")} />
       </Form.Item>
 
-      <Form.Item name="preCommand" label={t("workflow_node.deploy.form.ssh_pre_command.label")} rules={[formRule]}>
-        <Input.TextArea autoSize={{ minRows: 1, maxRows: 5 }} placeholder={t("workflow_node.deploy.form.ssh_pre_command.placeholder")} />
+      <Form.Item className="mb-0">
+        <label className="mb-1 block">
+          <div className="flex w-full items-center justify-between gap-4">
+            <div className="max-w-full grow truncate">
+              <span>{t("workflow_node.deploy.form.ssh_pre_command.label")}</span>
+            </div>
+            <div className="text-right">
+              <Dropdown
+                menu={{
+                  items: [
+                    {
+                      key: "backup_files",
+                      label: t("workflow_node.deploy.form.ssh_preset_scripts.option.backup_files.label"),
+                      onClick: () => handlePresetPreScriptClick("backup_files"),
+                    },
+                  ],
+                }}
+                trigger={["click"]}
+              >
+                <Button size="small" type="link">
+                  {t("workflow_node.deploy.form.ssh_preset_scripts.button")}
+                  <DownOutlinedIcon />
+                </Button>
+              </Dropdown>
+            </div>
+          </div>
+        </label>
+        <Form.Item name="preCommand" rules={[formRule]}>
+          <Input.TextArea autoSize={{ minRows: 1, maxRows: 5 }} placeholder={t("workflow_node.deploy.form.ssh_pre_command.placeholder")} />
+        </Form.Item>
       </Form.Item>
 
       <Form.Item className="mb-0">
@@ -245,7 +289,7 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini
                     {
                       key: "reload_nginx",
                       label: t("workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label"),
-                      onClick: () => handlePresetScriptClick("reload_nginx"),
+                      onClick: () => handlePresetPostScriptClick("reload_nginx"),
                     },
                   ],
                 }}
diff --git a/ui/src/i18n/locales/en/nls.workflow.nodes.json b/ui/src/i18n/locales/en/nls.workflow.nodes.json
index c2ac7883..69ddba45 100644
--- a/ui/src/i18n/locales/en/nls.workflow.nodes.json
+++ b/ui/src/i18n/locales/en/nls.workflow.nodes.json
@@ -372,6 +372,7 @@
   "workflow_node.deploy.form.local_post_command.label": "Post-command (Optional)",
   "workflow_node.deploy.form.local_post_command.placeholder": "Please enter command to be executed after saving files",
   "workflow_node.deploy.form.local_preset_scripts.button": "Use preset scripts",
+  "workflow_node.deploy.form.local_preset_scripts.option.backup_files.label": "POSIX Bash - Backup certificate files",
   "workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label": "POSIX Bash - Reload nginx",
   "workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label": "PowerShell - Binding IIS",
   "workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label": "PowerShell - Binding netsh",
@@ -423,6 +424,7 @@
   "workflow_node.deploy.form.ssh_post_command.label": "Post-command (Optional)",
   "workflow_node.deploy.form.ssh_post_command.placeholder": "Please enter command to be executed after uploading files",
   "workflow_node.deploy.form.ssh_preset_scripts.button": "Use preset scripts",
+  "workflow_node.deploy.form.ssh_preset_scripts.option.backup_files.label": "POSIX Bash - Backup certificate files",
   "workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label": "POSIX Bash - Reload nginx",
   "workflow_node.deploy.form.ssh_use_scp.label": "Fallback to use SCP",
   "workflow_node.deploy.form.ssh_use_scp.tooltip": "If the remote server does not support SFTP, please enable this option to fallback to SCP.",
diff --git a/ui/src/i18n/locales/zh/nls.workflow.nodes.json b/ui/src/i18n/locales/zh/nls.workflow.nodes.json
index aecc8599..afc1db09 100644
--- a/ui/src/i18n/locales/zh/nls.workflow.nodes.json
+++ b/ui/src/i18n/locales/zh/nls.workflow.nodes.json
@@ -372,6 +372,7 @@
   "workflow_node.deploy.form.local_post_command.label": "后置命令(可选)",
   "workflow_node.deploy.form.local_post_command.placeholder": "请输入保存文件后执行的命令",
   "workflow_node.deploy.form.local_preset_scripts.button": "使用预设脚本",
+  "workflow_node.deploy.form.local_preset_scripts.option.backup_files.label": "POSIX Bash - 备份原证书文件",
   "workflow_node.deploy.form.local_preset_scripts.option.reload_nginx.label": "POSIX Bash - 重启 nginx 进程",
   "workflow_node.deploy.form.local_preset_scripts.option.binding_iis.label": "PowerShell - 导入并绑定到 IIS(需管理员权限)",
   "workflow_node.deploy.form.local_preset_scripts.option.binding_netsh.label": "PowerShell - 导入并绑定到 netsh(需管理员权限)",
@@ -423,6 +424,7 @@
   "workflow_node.deploy.form.ssh_post_command.label": "后置命令(可选)",
   "workflow_node.deploy.form.ssh_post_command.placeholder": "请输入保存文件后执行的命令",
   "workflow_node.deploy.form.ssh_preset_scripts.button": "使用预设脚本",
+  "workflow_node.deploy.form.ssh_preset_scripts.option.backup_files.label": "POSIX Bash - 备份原证书文件",
   "workflow_node.deploy.form.ssh_preset_scripts.option.reload_nginx.label": "POSIX Bash - 重启 nginx 进程",
   "workflow_node.deploy.form.ssh_use_scp.label": "回退使用 SCP",
   "workflow_node.deploy.form.ssh_use_scp.tooltip": "如果你的远程服务器不支持 SFTP,请开启此选项回退为 SCP。",