gpt4 book ai didi

java - 防止命令行参数显示在 bash 历史记录或带有 bash 脚本的 ps -ef 中

转载 作者:行者123 更新时间:2023-12-02 06:17:21 27 4
gpt4 key购买 nike

我有一些执行 bash 脚本的 java 代码,该脚本又执行一个需要命令行参数才能运行的命令行工具。

此工具的命令行参数之一是纯文本密码。

脚本类似于:

#!/bin/bash

# script.sh
# some setup code

<cli-tool-executable> -arg1 <arg1> -arg2 <arg2> ... -password <password>

我通过apache commons exec从java代码调用它通过做类似的事情

CommandLine commandLine = new CommandLine("bash");

// bash script that runs the tool
commandLine.addArgument("script.sh");

// add other arguments
commandLine.addArgument(...);

// execute
new DefaultExecutor().execute(commandLine);

鉴于目前的状态,如果我运行 ps -ef 或查看 bash 历史记录,我将能够看到提供给 cli 工具的命令行参数,包括密码,作为纯文本,这显然不太好。

理想情况下,我希望密码能够以某种方式混淆或根本不显示。

我花了大半天的时间试图寻找其他解决方案,并在此过程中发现:

  • 有一些潜在的黑客方法可以使用 C 代码来执行此操作,但不一定安全或推荐
  • 不希望以这种方式传递密码(很明显),最好通过以某种安全方式控制其权限的文​​件,或者通过环境并作为标准输入传递,或者仅通过代码本身。不幸的是,这两个选项都不适合我(该工具不支持它 - 它只需要一个名为 -password 的命令行参数和一个字符串密码,它不会读取任何环境变量或类似的内容)。
  • 我仍然不确定我正在尝试做的事情是否完全可能

我尝试将内容放入环境变量中并将其传递给 -password 参数,我尝试将其放入文件中并尝试将 cat passwordfile 放入密码参数中,但在所有情况下我试过了,似乎没有显示密码参数。

有人对此有什么想法/建议吗?谢谢。

最佳答案

可能可能性不大,但您可以在 docker bash 内运行命令。实例(具有适当的安全设置)。例如,使用 Dockerfile

FROM bash:4.4
COPY script.sh /
CMD ["bash", "/script.sh"]

作为探索的替代方案,有一个 docker engine API (点击 HTTP 选项卡),基本上是 Docker 客户端的大部分功能。

关于java - 防止命令行参数显示在 bash 历史记录或带有 bash 脚本的 ps -ef 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55859762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com