Rundeck执行远程脚本遇sudo无TTY及认证问题,请求排查
问题分析与解决方案
核心问题
你的 Rundeck 任务卡住是因为sudo 命令匹配规则错误,导致 Rundeck 无法识别需要自动输入密码的 sudo 指令,同时脚本本身存在权限遗漏,另外需确保作业配置了对应的密码选项。
具体修正步骤
- 修正 sudo 命令匹配规则
你当前配置的sudo-command-pattern="^sudo .+? sudo .*$"仅匹配包含两次 sudo的命令,但你的脚本里只有单次 sudo 指令(且前面的sed操作还遗漏了 sudo),导致 Rundeck 无法触发自动输密逻辑。
将该规则改为:
sudo-command-pattern="^sudo .*$"
如果脚本中 sudo 出现在命令中间(比如 && 之后),可以调整为更宽松的匹配:sudo-command-pattern=".*sudo .*"
- 修复脚本权限问题
修改/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
- 确保作业配置了 sudoPassword 选项
你在节点配置中设置了sudo-password-option="option.sudoPassword",需要在创建作业时:
- 添加一个密码类型的选项,名称为
sudoPassword - 将该选项的值存储到 Rundeck 密钥存储中,或执行作业时手动输入
- 简化节点配置
无需同时启用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
相关产品推荐
相关产品推荐

