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

2023-12-15

Rundeck 将传递给作业的所有选项设置为环境变量,例如$RD_OPTION_*但当作业在具有不同 ssh 端口的远程节点中执行时,它不会设置这些变量。脚本成功登录远程节点,但环境变量不存在。请帮我提供解决方案。

工作定义示例:

<joblist>
  <job>
    <context>
      <options preserveOrder='true'>
        <option name='option1' required='true' />
      </options>
    </context>
    <description>job description</description>
    <dispatch>
      <excludePrecedence>true</excludePrecedence>
      <keepgoing>false</keepgoing>
      <rankOrder>ascending</rankOrder>
      <threadcount>1</threadcount>
    </dispatch>
    <executionEnabled>true</executionEnabled>
    <id>id</id>
    <loglevel>DEBUG</loglevel>
    <name>job name</name>
    <nodefilters>
      <filter>name: remote_node</filter>
    </nodefilters>
    <nodesSelectedByDefault>true</nodesSelectedByDefault>
    <notification>
      <onfailure>
        <email attachLog='true' recipients='[email protected]' subject='job failure :(' />
      </onfailure>
      <onsuccess>
        <email recipients='[email protected]' subject='job succes' />
      </onsuccess>
    </notification>
    <scheduleEnabled>true</scheduleEnabled>
    <sequence keepgoing='false' strategy='step-first'>
      <command>
        <exec>python path/to/script.py $RD_OPTION_OPTION1 > /path/to/logfile_$RD_JOB_EXECID.log 2>&1</exec>
      </command>
      <command>
        <exec>java -jar path/to/jarfile.jar ${option.option1} >> "/path/to/logfile_${job.execid}.log" 2>&1</exec>
      </command>
    </sequence>
    <uuid>job-uuid</uuid>
  </job>
</joblist>

<!-- 
Here
$RD_JOB_EXECID,${job.execid},${option.option1},$RD_OPTION_OPTION1 are not being setup as environment variables when remote node is selected for execution
but the same variables are set up as environment variables when executed locally.
Rundeck logins to the remote node as user successfully.

Log entries are seen in /path/to/logfile_.log file in remote node since $RD_JOB_EXECID has not been set up.

the options @option.option1@ are working fine since they have been replaced by rundeck before executing command.

Rundeck details:
    user: rundeck
    shell: /bin/nologin
    
    rundeck logs into remote server as normal user who has all permissions to execute all these scripts/jars.

-->

Note:

在具有不同 ssh 端口的远程实例上执行时,Rundeck 不会设置环境变量。在本例中,端口为 2808,并且在 resources.xml 中已将其更新为123.456.789.0:2808。 Rundeck 登录服务器并成功执行脚本(没有环境变量)。远程实例 sshd_config 已配置为接受 RD_* 变量。使用端口登录时设置和访问相同的环境变量22.


我认为你搞混了Rundeck 命令参数 and Rundeck环境变量

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

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

这是一个“环境变量”:$RD_JOB_EXECID

无需任何设置,如果您在 Rundeck 服务器本身上运行作业,则两者都可以正常工作,但如果您想将作业分派到节点,$RD_JOB_EXECID无法开箱即用。

要通过远程命令调度传递环境变量,它是 需要在远程端正确配置 SSH 服务器。看 “sshd_config(5)”中的 AcceptEnv 指令手册页为了 指示。

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

 Example in sshd_config:

 # pass Rundeck variables 
 AcceptEnv RD_*

Rundeck SSH 插件

在 Rundeck 服务器上

确保你有SendEnv RD_*在 ssh_config 中设置

对于您的用例,${job.execid},${option.option1}可以完美地工作,不会弄乱 sshd_config


它确实可以在不同的 SSH 端口上工作。

enter image description here

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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rundeck 未设置环境变量以使用不同的 ssh 端口进行远程执行 的相关文章

  • Rundeck - 我创建的用于运行 python 脚本的作业调用不同的 python

    我对使用 Rundeck 还很陌生 我的工作应该是执行一个 python 文件 只是为了给您一个概述 我的设备有 python 3 8 5 和 3 7 Rundeck 使用版本 3 7 即使在我的环境变量中我将 PY HOME 设置为版本
  • 如何在java中使用正则表达式非捕获组进行字符串替换

    我有一个改变的要求AssemblyVersion在新的构建上 我用java代码来做string replaceAll regexPattern updatedString 此代码适用于正常的正则表达式模式 但我无法在此模式中使用非捕获组 我
  • COM 互操作、隔离和排除重复引用

    我们在我们编写的 C dll 程序集 A 中使用 Microsoft 提供的 COM DLL dsofile dll 为了避免必须注册 COM dll 我已将对 dsofile dll 的引用的isolated 属性切换为 true 这意味
  • 如何使用命令行从 biml 生成 ssis 包并在服务器上部署 ssis

    我致力于创建 biml 从中生成 ssis 包 构建SSIS项目 然后在服务器上部署ispac文件 但这些所有手动步骤可以自动化吗 我可以使用命令行从 biml 生成 ssis 吗 除了 bidshelper 之外 还有哪些命令以及在计算机
  • 从 Delphi 将列表导出到 OpenOffice Calc

    我正在使用 Delphi 7 我想使用自动化而不是使用文件将列表内容从我的程序导出到 OpenOffice Calc 任务很简单 创建新文档 迭代行 列并更改单元格数据 我找到了一些代码 但它并不完整 我希望有人有一些示例代码可以完成这个非
  • 发送自动短信

    首先 我们使用 net sql server 我有一位客户对能够在预定时间发送短信的系统感兴趣 除了通过电子邮件网关发送短信之外 我从未做过类似的事情 例如 电子邮件受保护 cdn cgi l email protection 但是 我认为
  • 用于屏幕文本的 OCR(光学字符识别)

    我正在尝试创建一个软件 通过捕获屏幕截图来自动化 PC 然后使用 OCR 光学字符识别 来查找要单击的特定按钮 例如 我已经有了鼠标和键盘控制部分 但现在 我需要 OCR 来处理屏幕截图 我发现 Tesseract OCR 似乎不能很好地处
  • 每个环境使用不同的 URL 运行相同的 Testcafe 测试

    我正在研究 TestCafe 概念验证 我在一个测试环境中进行了一些测试 我需要一种方法来在最多 3 个具有不同 URL 的不同测试环境中运行相同的测试 对于这种情况有最佳实践吗 解决方案是在 testcafe 命令行上添加自定义选项 例如
  • 这是什么错误:位于 com.google.common.base.Preconditions.checkNotNull

    我是一名新的自动化测试人员 正在处理示例测试脚本 需要你们的一些帮助 我尝试过使用 POM 和基本的 TestNG 我创建了 2 个包 页面和测试用例 当我尝试从我的页面包访问 ClickJoin Enterusername 方法时 出现一
  • Github - 自动将问题分配给项目

    我想将问题自动分配给 Github 中的项目 基本上自动为每个自动打开的问题自动生成以下屏幕截图 有任何想法吗 有两个本机支持的选项 有一个官方操作可以添加问题并拉取请求projects https docs github com en i
  • 粘合(拼版)PDF 文档

    我有几个 A4 PDF 文档 我想将它们 二合一 粘合 在一起成为 A3 格式的 PDF 文档 所以我将从 2PDFs 中得到A4单面 PDFA3 我发现了出色的实用性PDF工具包 http www pdfhacks com pdftk 和
  • 使用 python 和 selenium 自动化 Google 登录显示“此浏览器或应用程序可能不安全”

    我尝试使用 Gmail 或任何 Google 服务登录 但显示以下 此浏览器或应用程序可能不安全 消息 我还尝试执行诸如在我的 acc 中启用不太安全的应用程序之类的选项 但它不起作用 然后我创建了一个新的谷歌帐户 它对我有用 但我的旧配件
  • 如何使用 Excel Interop 获取筛选行的范围?

    我正在为我的项目使用 Excel Interop 程序集 如果我想使用自动过滤器 那么可以使用 sheet UsedRange AutoFilter 1 SheetNames 1 Microsoft Office Interop Excel
  • 如何将IDL导入到Delphi中?

    我如何导入接口定义语言 idl 文件存入Delphi 将类型和接口转换为 pascal 文件 我试过了 File Open 它只显示 idl 文本文件的文本 Project 添加到项目 它只是 就像 添加了一个 idl文本文件到项目 成分
  • 即使页面未完全加载,我们也可以使用 Selenium 获取页面源吗(TimeoutException: Message: timeout)?

    即使遇到 TimeoutException Message timeout 也能获取页面源码吗 当我调用 driver page source 时 有时无法加载整页 但我只需要它的部分信息 尚未确定 所以我只想在任何情况下保存页面 是否可以
  • 是否可以自动化 SQL Server 2008 分析器?

    有一个post https stackoverflow com questions 488020 what is your most useful sql trick to avoid writing more code关于有用的 SQL
  • 自动化发布 Android 应用程序的过程

    我们有几个Android应用程序 发现每个版本上传应用程序的过程都是通过Android 开发者网站 https play google com apps publish slow and 无效的 我们喜欢使该过程自动化 更明确地说 我们可以
  • 如何使用 phpMyAdmin 自动导出 mySQL 数据库

    是否可以使用 phpMyAdmin 自动导出单个数据库 当我尝试从外部脚本 如 php 创建 sql 文件时 生成的 sql 文件看起来很干净 但导入时会导致应用程序出现问题 当我使用 phpMyAdmin 通过使用 Export 创建类似
  • Android – 同一应用程序的多个自定义版本

    部署 Android 应用程序的多个自定义版本的最佳方法是什么 目前我有一个脚本来交换资源文件夹以获得我的应用程序的自定义版本 它工作得很好 但所有自定义版本在 AndroidManifest xml 中仍然具有相同的包名称 因此 不可能同
  • 如何使用 cypress 登录 Salesforce?

    我目前正在使用 cypress 进行一些测试 但是 我必须与 salesforce 进行一些测试 似乎我遇到了以下问题 哎呀 没有可以运行的测试 context Salesforce gt beforeEach gt cy request

随机推荐

  • SelectSingleNode 在 dnx core 5.0 中给出编译错误

    我使用 SelectSingleNode 方法收到此错误 DNX Core 5 0 错误 CS1061 XmlDocument 不包含 SelectSingleNode 的定义 并且找不到接受 XmlDocument 类型的第一个参数的扩展
  • 在 powershell 中将 XML 转换为 xlsx

    我在网上找到了一些powershell命令将xlsx文件转换为xml文件 这很好用 但是我得到的 xml 会被稍微操纵 之后我需要将其转换回标准 xlsx 文件 使用以下命令生成的 xml 如何将其转换回 xlsx 文件 Thanks xl
  • OpenSSL 客户端基于证书的身份验证失败

    我正在尝试运行以下命令 root localhost certs openssl s client connect localhost 7043 cert opt openssl 1 0 0a ssl certwork client cli
  • ng-repeat 与空对象

    我收到 中继器重复 错误 我在某处读到可以通过索引进行跟踪 但是一旦我这样做 我的所有对象标题和描述值就会变得重复 我需要为每个步骤定义唯一的标题 描述和资产数组 我怎样才能做到这一点 var stepTemplate assets sco
  • Android JET 文件格式是专有的还是开放的?

    我需要以编程方式为我的 Android 项目从头开始创建 JET 文件 文件格式是否公开 鉴于所有 JET Sonivox 文件均采用 Android 源代码 包括较低级别的 C 文件 应该可以确定其格式 https android goo
  • 如何使用 pandas 重塑每第 n 行的数据?

    我需要帮助来重塑 csv 文件中的数据 该文件包含超过 10000 行 每行 10 行 例如我有这个 csv 文件 Ale Brick 1 ww 2 ee 3 qq 3 xx 5 dd 3 gg 7 hh 8 tt 9 yy 0 uu 1
  • 当我调整 Jframe 大小时如何停止 auto-repaint()

    我还在学习Java 如果有人能帮助我我会很高兴 抱歉英语不好 我是西班牙人 我正在制作一款瓷砖游戏 该游戏使用经典的 游戏循环 将引擎限制在 60fps 循环休眠然后调用repaint 这很好用 但 问题是 当 JFrame 调整大小或最大
  • 模拟连接在 Couchbase 中如何工作?

    我有一份相互依赖的文件 第一的 doctype closed auctions seller person person11304 buyer person person0 itemref item item1 price 50 03 da
  • 如何一次又一次地调用一个方法,直到它返回包含“None”的“Future”值

    给定一个返回 a 的方法Future像这样 def remove id String Future Option User Future removes and returns the user identified by id 我如何一次
  • 使用 ajax 和 JavaScript 发布到 GitHub v3 API 失败并出现 HTTP 404

    我正在尝试按照文档将 blob 发布到 JavaScript jQuery 中的 GitHub APIhttps developer github com v3 git blobs create a blob 但是我不断收到 404 请求
  • 如何通过 PHP 将 .xls 转换为 .pdf?

    我在谷歌上搜索了很多小时 但还没有找到解决方案 我需要将 xls 文件转换为 pdf 文件 怎么做 我找到了这个http www aspose com 但似乎它没有PHP API 只有 NET和JAVA 感谢您的每一个建议 PHPExcel
  • 上传apk到市场时,apk必须使用与之前版本相同的证书进行签名

    我已经创建了一个应用程序并发布在android市场上 现在我想发布它的第二个版本 我想澄清几件事 我保留了相同的包名称 我没有以前的密钥库 因为我更改了 Windows 因此删除了密钥库 并且我没有该密钥库的备份 现在我应该有什么方法可以从
  • 在 Xcode 6 中调整测量中心

    在新的 Xcode 6 中 缺少更改按钮测量中心的功能 在 Xcode 5 中 https i stack imgur com 3fCfY jpg Xcode 6 https i stack imgur com 46YTZ jpg 当我将一
  • 使用带有 LAME 的 NDK 的内置函数警告的不兼容隐式声明

    我正在尝试按照位于以下位置的教程进行操作 http developer samsung com android technical docs Porting and using LAME MP3 on Android with JNI 其要
  • 选择 2 下拉列表但允许用户输入新值?

    我想要一个包含一组值的下拉菜单 但也允许用户 选择 此处未列出的新值 我看到select2如果您使用它 则支持此功能tags模式 但是有没有办法在不使用标签的情况下做到这一点 The 很好的答案由 提供 fmpwizard适用于 Selec
  • 检测 div 中的滚动结束

    我有一个包含许多博客文章的动态网站 我想首先加载四个帖子 然后在滚动到末尾时加载另外四个帖子 我知道如何在后端处理它 但我在前端遇到问题 我已将 html 和 body 的高度设置为 100 因此窗口上的滚动事件不起作用 作为解决方法 我决
  • 使用 std::bind 时从 std::function 获取函数指针

    我正在尝试使用std function和这个结合std bind 但我遇到了一些问题 这有效 include
  • 如何在脚本中处理MySQL时区

    我正在开发一个移动应用程序 从应用程序调用 Web 服务 该服务根据模式 mode xx 运行不同的查询 在其中一些查询中 我使用日期函数 例如 DATE NOW MySQL数据库中存储的数据存储在GMT 7 加拿大山地时间 我尚未为此网络
  • 在python 2.6中创建字典的字典

    我在 python2 7 中有一行代码生成空字典的字典 values 0 1 2 4 5 8 value dicts x for x in values 在 python2 6 上运行时会引发语法错误 我可以使用 for 循环做同样的事情
  • Rundeck 未设置环境变量以使用不同的 ssh 端口进行远程执行

    Rundeck 将传递给作业的所有选项设置为环境变量 例如 RD OPTION 但当作业在具有不同 ssh 端口的远程节点中执行时 它不会设置这些变量 脚本成功登录远程节点 但环境变量不存在 请帮我提供解决方案 工作定义示例