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