如何在Shell脚本中调用Rundeck密钥库密钥?密码传递问题排查
Rundeck密钥传递问题排查与替代加密方案
当前密码传递方式的排查要点
- 选项变量匹配:脚本中使用的
$RD_OPTION_AUTOMATIONPASS必须和Rundeck作业中选项的名称完全对应(Rundeck会将选项名转为大写并添加RD_OPTION_前缀)。比如选项名设为automationpass,变量才会是RD_OPTION_AUTOMATIONPASS,注意大小写敏感。 - 选项配置正确性:作业中的选项需设置为
Secure类型,且默认值要从密钥库中选择对应条目,而非手动输入密钥内容。 - 变量注入验证:可在脚本中临时添加
echo "$DB_PASSWORD" > /tmp/verify_pass.log(测试后删除),执行作业后查看文件是否有值,确认变量是否被正确注入。
其他Rundeck加密密码的实用方法
1. 安全环境变量方式
在作业的「环境变量」配置中添加DB_PASSWORD,值选择密钥库的对应条目(点击密钥图标选择)。脚本中直接用$DB_PASSWORD引用,无需前缀,更直观。
2. 节点属性加密
在节点定义(如resources.xml或节点源)中添加加密属性:
<node name="oracle-node" ... db.password="${encrypt('your_db_password')}" />
脚本中通过$RD_NODE_DB_PASSWORD引用,适合多节点不同密码的场景。
3. 直接使用SQL作业步骤
若仅需执行SQL查询,无需编写Shell脚本:直接创建「SQL」类型的作业步骤,配置Oracle连接时,密码选择密钥库条目,Rundeck自动处理加密与数据库连接。
修正后的脚本示例(安全环境变量版)
#!/bin/bash # Set Oracle environment variables export ORACLE_HOME=/u01/app/oracle/product/19/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export ORACLE_SID=orcl # Set Oracle database credentials DB_USER="automation" DB_PASSWORD="$DB_PASSWORD" # 引用安全环境变量 DB_SID="icici" # Directory to store reports REPORT_DIR="/u01/" # Dynamically calculate dates for 'previous hour' START_DATE=$(date --date='1 hour ago' '+%d-%b-%y %I.%M.%S.000000000 %p') END_DATE=$(date '+%d-%b-%y %I.%M.%S.000000000 %p') # Output file with timestamp OUTPUT_FILE="$REPORT_DIR/hour_report_$(date +%Y%m%d%H%M%S).txt" # SQL command with dynamic dates SQL_COMMAND="SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF; select * from events WHERE EVENT_TIMESTAMP BETWEEN TO_TIMESTAMP('$START_DATE', 'DD-MON-RR HH.MI.SS.FF AM') AND TO_TIMESTAMP('$END_DATE', 'DD-MON-RR HH.MI.SS.FF AM');" # Run SQL Command and save output echo "$SQL_COMMAND" | sqlplus -S "$DB_USER/$DB_PASSWORD@$DB_SID" > "$OUTPUT_FILE"
内容的提问来源于stack exchange,提问作者Thrinatha Reddy
相关产品推荐
相关产品推荐

