问题背景
在共用服务器上,`export PASSWORD=secret` 这类命令会被记录在历史记录中,
其他用户执行 `history` 就能看到,存在安全风险。
方法一:命令前加空格
在命令最前面加一个空格,bash 默认不会将其写入历史记录。
bash
export MY_PASSWORD=secret123
⚠️ 注意:命令最前面有一个空格
前提条件
需要确认 HISTCONTROL 已包含 ignorespace:
echo $HISTCONTROL
# 输出应包含 ignorespace 或 ignoreboth
如果不包含,手动设置
临时生效(当前 session)
export HISTCONTROL=ignoreboth
永久生效
echo 'export HISTCONTROL=ignoreboth' >> ~/.bashrc
source ~/.bashrc
ignoreboth 同时启用以下两个选项:
| 选项 | 作用 |
|---|---|
ignorespace |
命令前有空格则不记录 |
ignoredups |
重复命令不记录 |
方法二:read 交互式输入(推荐)
密码完全不出现在命令行,是最安全的方式。
read -s -p "Enter password: " MY_PASSWORD && export MY_PASSWORD
| 参数 | 说明 |
|---|---|
-s |
silent 模式,输入时不回显 |
-p |
显示提示语 |
方法对比
| 方法 | 安全性 | 便捷性 | 适用场景 |
|---|---|---|---|
| 命令前加空格 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 快速临时使用 |
read 交互输入 |
⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 推荐日常使用 |