【问题标题】:rundeck sudo: no tty present and no askpass program specifiedrundeck sudo:不存在 tty,也没有指定 askpass 程序
【发布时间】:2022-11-10 23:24:09
【问题描述】:

我正在使用 rundeck 服务器。我在其中添加了远程节点并尝试在远程节点上运行脚本。

#!/bin/bash
cat /etc/os-release
sed -i  '/#DNS=/c DNS=8.8.8.8' /etc/systemd/resolved.conf && sudo systemctl restart systemd-resolved.service

当我运行这项工作时,它被卡住并在手动终止工作后。

输出

NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
Failed: Interrupted: Connection was interrupted
[sudo] password for anas:

资源.xml

<?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 .*$" sudo-password-option="option.sudoPassword"  username="anas" ssh-authentication="password" ssh-password-storage-path="keys/Proxmox/88.password"/>

</project>

我还尝试了许多其他属性,例如:

sudo-prompt-pattern="^.*password.*"  

sudo-password-option="option.sudoPassword"  

sudo-command-pattern="^sudo .+? sudo .*$"  

sudo-command-enabled="true"  

always-set-pty="true" 

sudo2-command-enabled="true" 

sudo2-command-pattern="^sudo .+? sudo .*$" 

Rundeck 版

Rundeck 4.7.0

谁能解释一下,我错过了什么?

【问题讨论】:

    标签: rundeck


    【解决方案1】:

    我复制了你的场景和你的问题。检查您的模型源条目,我确定您想使用一个选项作为密码来验证和执行sudo 命令,让我分享一个节点条目和作业定义示例:

    节点定义示例(在远程 Ubuntu 22.04 和 Rocky Linux 8 服务器上测试):

    <?xml version="1.0" encoding="UTF-8"?>
    <project>
      <node name="ubuntu" 
      description="ubuntu" 
      tags="prod" 
      hostname="192.168.56.12" 
      osArch="amd64" 
      osFamily="unix" 
      osName="Linux" 
      osVersion="5.11.0-49-generic #55-Ubuntu SMP" 
      always-set-pty="true"
      username="vagrant" 
      ssh-authentication="password" 
      ssh-password-storage-path="keys/sudopasswd"
      sudo-command-enabled="true" 
      sudo-command-pattern="^sudo$"
      sudo-prompt-pattern="^[sudo] password for .+: .*"
      sudo-password-option="option.sudoPassword" />
    </project>
    

    如您所见,sudo-command-pattern 不同,您需要添加“接收”sudo 提示的sudo-prompt-pattern 属性以自动输入密码。

    工作定义示例:

    - defaultTab: nodes
      description: ''
      executionEnabled: true
      id: 57262967-00f1-4e5e-b872-57ace765daee
      loglevel: INFO
      name: TestSUDO
      nodeFilterEditable: false
      nodefilters:
        dispatch:
          excludePrecedence: true
          keepgoing: false
          rankOrder: ascending
          successOnEmptyNodeFilter: false
          threadcount: '1'
        filter: 'name: ubuntu '
      nodesSelectedByDefault: true
      options:
      - name: sudoPassword
        required: true
        secure: true
      plugins:
        ExecutionLifecycle: null
      scheduleEnabled: true
      sequence:
        commands:
        - description: 'first test: using the command step'
          exec: sudo whoami
        - description: 'second test: on script step'
          fileExtension: .sh
          interpreterArgsQuoted: false
          script: |
            sudo whoami
          scriptInterpreter: sudo /bin/bash
        keepgoing: false
        strategy: sequential
      uuid: 57262967-00f1-4e5e-b872-57ace765daee
    
    

    需要考虑的一些事项:

    1. sudo-password-option 节点条目中命名的选项(作业中的 sudoPassword)必须是 Secure Remote Authentication 选项。

    2. sudo 属性在命令步骤上完美运行,这在脚本步骤上有点不同(下一点)。

    3. 在脚本步骤(如您的用例)上,它需要在调用字符串文本框中定义sudo 命令(编辑您的工作> 转到您的脚本步骤> 单击高级链接> 调用字符串),在我的情况下,我使用sudo /bin/bash.sh 作为文件扩展名。

      检查结果here

    【讨论】: