Skip to content

Instantly share code, notes, and snippets.

@wilkice
Last active August 27, 2021 15:28
Show Gist options
  • Save wilkice/166a146bce3adcbfd2f260d2c98f12e3 to your computer and use it in GitHub Desktop.
Save wilkice/166a146bce3adcbfd2f260d2c98f12e3 to your computer and use it in GitHub Desktop.
[如何在命令行安全的传递密码] #linux

如何在命令行安全的传递敏感信息

在编程的时候,有的时候我们会需要传递敏感信息,比如密码,API key 等。如果是把这些敏感信息写在代码中的话,那么可能会有泄露的可能。如果是单独用一个文件来存放这些敏感信息,那么也需要注意这个文件的安全性问题。有没有一种办法是最安全的呢?

答案是有的,就是使用环境变量。在一个会话里面设置的环境变量在别的会话里面是读取不到的,这样可以确保我们的敏感信息不会意外泄露。

使用环境变量就一定够了吗?不一定。相信你一定知道一般(默认情况)我们在命令行的操作都是会被 shell 记录的,你可以用 history 这个命令查看你之前的操作命令。对的,也可以看到我们执行了设置敏感信息的命令。

幸运的是,我们可以选择不让 shell 记录我们的操作。原理就是 shell 有一个变量 HISTCONTROL,这个变量可以控制某些命令不被记录,比如以空格开头的,或者是重复的命令。看来我们找到方法了,只需要正确设置 HISTCONTROL 的值然后在执行包含敏感信息的命令时在前面加一个 Space 即可。

要达到不让 shell 记录的目的,首先我们需要去 .bashrc 文件中设置 HISTCONTROL=ignoreboth。然后在执行敏感命令的时候,在命令前面多敲一个 Space,这样我们的操作就不会被记录。就算是用 ⬆️ 也是看不到的。

示例

单次执行

# 注意命令前面有一个空格
 pass=test ./show_name

多次执行

# 这里只用在执行 export 的时候多一个空格就行
 export pass=test
./show_name

参考资料

How do I prevent commands from showing up in Bash history?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment