You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rundeck执行远程脚本遇sudo无TTY及认证问题,请求排查

问题分析与解决方案

核心问题

你的 Rundeck 任务卡住是因为sudo 命令匹配规则错误,导致 Rundeck 无法识别需要自动输入密码的 sudo 指令,同时脚本本身存在权限遗漏,另外需确保作业配置了对应的密码选项。

具体修正步骤

  1. 修正 sudo 命令匹配规则
    你当前配置的 sudo-command-pattern="^sudo .+? sudo .*$" 仅匹配包含两次 sudo的命令,但你的脚本里只有单次 sudo 指令(且前面的 sed 操作还遗漏了 sudo),导致 Rundeck 无法触发自动输密逻辑。
    将该规则改为:
sudo-command-pattern="^sudo .*$"

如果脚本中 sudo 出现在命令中间(比如 && 之后),可以调整为更宽松的匹配:sudo-command-pattern=".*sudo .*"

  1. 修复脚本权限问题
    修改 /etc/systemd/resolved.conf 需要 root 权限,你的 sed 操作未加 sudo,会直接失败(可能被忽略但影响后续流程),修正后的脚本:
#!/bin/bash
cat /etc/os-release
sudo sed -i  '/#DNS=/c DNS=8.8.8.8' /etc/systemd/resolved.conf && sudo systemctl restart systemd-resolved.service
  1. 确保作业配置了 sudoPassword 选项
    你在节点配置中设置了 sudo-password-option="option.sudoPassword",需要在创建作业时:
  • 添加一个密码类型的选项,名称为 sudoPassword
  • 将该选项的值存储到 Rundeck 密钥存储中,或执行作业时手动输入
  1. 简化节点配置
    无需同时启用 sudo-command-enabled 和 sudo2-command-enabled,保留必要配置即可,修正后的节点配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<project>
 <node name="node-1" 
       always-set-pty="true" 
       description="Rundeck server node" 
       tags="" 
       hostname="64.23.123.189" 
       osArch="amd64" 
       osFamily="unix" 
       osName="Linux" 
       osVersion="4.15.0-189-generic" 
       sudo-command-enabled="true" 
       sudo-command-pattern="^sudo .*$" 
       sudo-prompt-pattern="^\[sudo\] password for .+?:$"
       sudo-password-option="option.sudoPassword"  
       username="anas" 
       ssh-authentication="password" 
       ssh-password-storage-path="keys/Proxmox/88.password"/>
</project>

更稳定的替代方案

直接给远程节点的 anas 用户配置免密 sudo(针对特定命令),避免 Rundeck 处理密码传递的问题:
在远程节点的 /etc/sudoers 文件中添加:

anas ALL=(ALL) NOPASSWD: /usr/bin/sed /etc/systemd/resolved.conf, /usr/bin/systemctl restart systemd-resolved.service

内容的提问来源于stack exchange,提问作者Anas Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:55:17