从 Apache Nifi 中的执行进程调用远程 shell 脚本时无法将环境变量作为敏感字段传递
Unable to pass envionment variables as sensitive fields while calling remote shell script from ExecuteProcess in Apache Nifi
我正在尝试通过主机环境中的脚本从 NiFi 中的 ExecuteProcess 处理器 运行 远程脚本。基本上,主机服务器中的 shell 脚本具有调用远程服务器的 ssh 字符串,然后调用该远程服务器中的脚本。我使用了 sshpass
包,我将密码保存在一个环境变量 (SSHPASS) 中,并在 ssh string.For 中传递了它 string.For 有关 sshpass 的更多信息,https://linux.die.net/man/1/sshpass 。主机脚本内容如下:
sshpass -e ssh user@host sh /path-to-script
当我将主机脚本路径传递给 ExecuteProcess 处理器的命令 属性 时,处理器的结果显示它没有登录到远程服务器。因此,经过一些调试,我在处理器中创建了一个用户定义的 属性,它指定了 环境变量 SSHPASS 及其值远程服务器的密码,然后就可以了。
我将密码导出为环境变量,这样我就不必首先将其作为明文传递。有没有我不必指定环境变量值的解决方法?也欢迎任何其他连接到远程服务器和调用脚本的方法的建议。
您是否尝试过对 sshpass
使用 -f
或 -d
选项?它们允许您分别从文件或文件描述符中读取密码。这样您就可以使用 OS 级别的访问控制来限制对文件的访问,而不是将密码放在其他用户或进程可能能够访问的环境变量中。
如果这些选项不够,我可以进一步调查为什么执行的进程显然无法访问环境变量值。
我正在尝试通过主机环境中的脚本从 NiFi 中的 ExecuteProcess 处理器 运行 远程脚本。基本上,主机服务器中的 shell 脚本具有调用远程服务器的 ssh 字符串,然后调用该远程服务器中的脚本。我使用了 sshpass
包,我将密码保存在一个环境变量 (SSHPASS) 中,并在 ssh string.For 中传递了它 string.For 有关 sshpass 的更多信息,https://linux.die.net/man/1/sshpass 。主机脚本内容如下:
sshpass -e ssh user@host sh /path-to-script
当我将主机脚本路径传递给 ExecuteProcess 处理器的命令 属性 时,处理器的结果显示它没有登录到远程服务器。因此,经过一些调试,我在处理器中创建了一个用户定义的 属性,它指定了 环境变量 SSHPASS 及其值远程服务器的密码,然后就可以了。
我将密码导出为环境变量,这样我就不必首先将其作为明文传递。有没有我不必指定环境变量值的解决方法?也欢迎任何其他连接到远程服务器和调用脚本的方法的建议。
您是否尝试过对 sshpass
使用 -f
或 -d
选项?它们允许您分别从文件或文件描述符中读取密码。这样您就可以使用 OS 级别的访问控制来限制对文件的访问,而不是将密码放在其他用户或进程可能能够访问的环境变量中。
如果这些选项不够,我可以进一步调查为什么执行的进程显然无法访问环境变量值。