Automation Rundeck未使用不同的ssh端口为远程执行设置环境变量

Automation Rundeck未使用不同的ssh端口为远程执行设置环境变量,automation,rundeck,Automation,Rundeck,Rundeck将传递给作业的所有选项设置为环境变量,如$RD\u OPTION.*,但当作业在具有不同ssh端口的远程节点中执行时,它不会设置这些变量。脚本成功登录到远程节点,但不存在环境变量。请帮我找个解决办法 作业定义示例: 职位描述 符合事实的 错误的 提升 1. 符合事实的 身份证件 调试 职务名称 名称:远程_节点 符合事实的 符合事实的 python路径/to/script.py$RD_OPTION\u OPTION1>/path/to/logfile\u$RD_作业\u EXE

Rundeck将传递给作业的所有选项设置为环境变量,如
$RD\u OPTION.*
,但当作业在具有不同ssh端口的远程节点中执行时,它不会设置这些变量。脚本成功登录到远程节点,但不存在环境变量。请帮我找个解决办法

作业定义示例:


职位描述
符合事实的
错误的
提升
1.
符合事实的
身份证件
调试
职务名称
名称:远程_节点
符合事实的
符合事实的
python路径/to/script.py$RD_OPTION\u OPTION1>/path/to/logfile\u$RD_作业\u EXECID.log 2>&1
java-jarpath/to/jarfile.jar${option.option1}>“/path/to/logfile{job.execid}.log”2>&1
作业uuid
我认为您混淆了Rundeck命令参数和Rundeck环境变量

这是一个“命令、脚本参数和作业引用参数”:
${job.execid}

正如其名称所述,您可以将其用作命令参数。就像你在工作定义中所做的一样

这是一个“环境变量”:
$RD\u JOB\u EXECID

在没有任何设置的情况下,如果在Rundeck服务器上运行作业,这两种方法都可以正常工作,但如果要将作业分派到节点,
$RD\u job\u EXECID
将无法正常工作

要通过远程命令分派传递环境变量,需要 需要在远程端正确配置SSH服务器见 的“sshd_config(5)”中的AcceptEnv指令 说明。

使用通配符模式允许RD_uu前缀变量提供 打开对Rundeck生成的环境变量的访问

在Rundeck服务器上

确保在ssh\u配置中设置了
SendEnv RD.*

对于您的用例,
${job.execid}
${option.option1}
将完美地解决sshd\u配置的混乱问题


它在不同的SSH端口上工作。

XML中的作业定义

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='nodeFilter' />
      </options>
    </context>
    <description></description>
    <dispatch>
      <excludePrecedence>true</excludePrecedence>
      <keepgoing>false</keepgoing>
      <rankOrder>ascending</rankOrder>
      <threadcount>1</threadcount>
    </dispatch>
    <executionEnabled>true</executionEnabled>
    <group>TEST</group>
    <id>63b6f283-39b2-479d-bba9-b1742bc2ea53</id>
    <loglevel>INFO</loglevel>
    <name>test rundeck job context</name>
    <nodefilters>
      <filter>${option.nodeFilter}</filter>
    </nodefilters>
    <nodesSelectedByDefault>true</nodesSelectedByDefault>
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <script><![CDATA[#!/usr/bin/python
import sys
print "I know ENV_VAR will not work as command line arguments %s " % sys.argv
]]></script>
        <scriptargs> "&gt;${job.execid}&lt; &gt;$RD_JOB_EXECID&lt;"</scriptargs>
      </command>
      <command>
        <script><![CDATA[#!/bin/bash
echo "But it works in Bash"
echo $RD_JOB_ID
echo $RD_JOB_EXECID

echo "Which port does sshd listening on?"
sudo netstat -tulpn | grep 2808]]></script>
        <scriptargs />
      </command>
    </sequence>
    <uuid>63b6f283-39b2-479d-bba9-b1742bc2ea53</uuid>
  </job>
</joblist>

符合事实的
错误的
提升
1.
符合事实的
测验
63b6f283-39b2-479d-bba9-b1742bc2ea53
信息
测试rundeck作业上下文
${option.nodeFilter}
符合事实的
符合事实的
“${job.execid}$RD_job_execid”
63b6f283-39b2-479d-bba9-b1742bc2ea53
我认为您混淆了Rundeck命令参数和Rundeck环境变量

这是一个“命令、脚本参数和作业引用参数”:
${job.execid}

正如其名称所述,您可以将其用作命令参数。就像你在工作定义中所做的一样

这是一个“环境变量”:
$RD\u JOB\u EXECID

在没有任何设置的情况下,如果在Rundeck服务器上运行作业,这两种方法都可以正常工作,但如果要将作业分派到节点,
$RD\u job\u EXECID
将无法正常工作

要通过远程命令分派传递环境变量,需要 需要在远程端正确配置SSH服务器见 的“sshd_config(5)”中的AcceptEnv指令 说明。

使用通配符模式允许RD_uu前缀变量提供 打开对Rundeck生成的环境变量的访问

在Rundeck服务器上

确保在ssh\u配置中设置了
SendEnv RD.*

对于您的用例,
${job.execid}
${option.option1}
将完美地解决sshd\u配置的混乱问题


它在不同的SSH端口上工作。

XML中的作业定义

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='nodeFilter' />
      </options>
    </context>
    <description></description>
    <dispatch>
      <excludePrecedence>true</excludePrecedence>
      <keepgoing>false</keepgoing>
      <rankOrder>ascending</rankOrder>
      <threadcount>1</threadcount>
    </dispatch>
    <executionEnabled>true</executionEnabled>
    <group>TEST</group>
    <id>63b6f283-39b2-479d-bba9-b1742bc2ea53</id>
    <loglevel>INFO</loglevel>
    <name>test rundeck job context</name>
    <nodefilters>
      <filter>${option.nodeFilter}</filter>
    </nodefilters>
    <nodesSelectedByDefault>true</nodesSelectedByDefault>
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='node-first'>
      <command>
        <script><![CDATA[#!/usr/bin/python
import sys
print "I know ENV_VAR will not work as command line arguments %s " % sys.argv
]]></script>
        <scriptargs> "&gt;${job.execid}&lt; &gt;$RD_JOB_EXECID&lt;"</scriptargs>
      </command>
      <command>
        <script><![CDATA[#!/bin/bash
echo "But it works in Bash"
echo $RD_JOB_ID
echo $RD_JOB_EXECID

echo "Which port does sshd listening on?"
sudo netstat -tulpn | grep 2808]]></script>
        <scriptargs />
      </command>
    </sequence>
    <uuid>63b6f283-39b2-479d-bba9-b1742bc2ea53</uuid>
  </job>
</joblist>

符合事实的
错误的
提升
1.
符合事实的
测验
63b6f283-39b2-479d-bba9-b1742bc2ea53
信息
测试rundeck作业上下文
${option.nodeFilter}
符合事实的
符合事实的
“${job.execid}$RD_job_execid”
63b6f283-39b2-479d-bba9-b1742bc2ea53

正如杨所说,这是由于ssh配置。同样地,
sshd\u-config
中的
AcceptEnv
变量在
ssh\u-config
中有
SendEnv
变量,因此我必须在
SendEnv
中指定
SendEnv-RD.*
本地主机ssh\u-config中,这将指示ssh将这些环境变量发送到服务器。我发现在使用环境变量时需要做以下几件事

  • SendEnv
    需要在localhost中的
    ssh\u config
    文件中设置,以发送环境变量
  • AcceptEnv
    需要在远程节点的
    sshd\u config
    文件中设置,以便接受传递给服务器的环境变量

  • 正如杨所说,这是由于ssh配置。同样地,
    sshd\u-config
    中的
    AcceptEnv
    变量在
    ssh\u-config
    中有
    SendEnv
    变量,因此我必须在
    SendEnv
    中指定
    SendEnv-RD.*
    本地主机ssh\u-config中,这将指示ssh将这些环境变量发送到服务器。我发现在使用环境变量时需要做以下几件事

  • SendEnv
    需要在localhost中的
    ssh\u config
    文件中设置,以发送环境变量
  • AcceptEnv
    需要在远程节点的
    sshd\u config
    文件中设置,以便接受环境