通过 bash 安全地传递密码

Mne*_*yne 4 passwords bash

我正在为我的工作构建一个 bash 脚本,以使我们的 Ubuntu 机器的初始设置和 Windows 域加入变得足够简单,对于那些对 Linux 一无所知的人来说也可以做到。我发现很多人说你不应该通过脚本传递密码,但为了提高效率,我必须这样做。该脚本在开始时会提示输入信息和凭据,并且需要能够在没有交互的情况下完成其工作。当我传递它时,我无法通过 ps 看到它,也无法将其存储为不安全的变量。有什么建议么?

eda*_*mon 7

read -s如果您确实必须这样做,您可以在脚本的早期将凭据读取到变量中,然后将这些值传递给提示。例如:

read -p "Enter your username: " username
read -sp "Enter your password: " password
echo
Run Code Online (Sandbox Code Playgroud)

我添加了空白,echo因为该-s选项read可防止用户的输入出现在终端中,包括通常在用户Enter回答提示时按下后创建的新行。

然后,您可以将$username$password变量用于脚本的其余部分,并且凭据不必存储在内存之外,这意味着它们将在脚本完成后丢失/销毁。

但是,请注意,任何将凭据作为命令行参数的程序或实用程序都会向运行该脚本的计算机上的其他用户显示这些凭据。例如,如果我要使用此方法运行 MySQL 查询,我可以这样做:

mysql -u "${username}" -p"${password}" -e "SHOW DATABASES;"
Run Code Online (Sandbox Code Playgroud)

计算机上的其他用户可以在运行时看到凭据,例如ps

ps -ef | grep mysql
...
watrudoin   29512 29443  0 12:57 pts/4    00:00:00 mysql -u MyUserName -phunter2 -e SHOW DATABASES
Run Code Online (Sandbox Code Playgroud)

您只需要意识到您所做的事情不一定是安全的,但您似乎已经安全了。

  • @edaemon 刚刚遇到这个,我很喜欢 Hunter2 参考:) (4认同)