当前位置: 首页 > news >正文

如何在 Shell 脚本中实现交互式输入密码隐藏显示?

在 Bash 脚本中,最稳妥的方式是使用 read 命令的 -s 参数禁止字符回显,若需兼容 POSIX sh 则通过 stty 控制终端回声,但这仅解决屏幕可见性问题,不涉及存储加密。

先说结论:优先使用 bash 内置的 read -s 实现隐藏输入,若需兼容旧式 sh 再用 stty -echo 配合 trap 恢复,注意这只能防止旁人窥屏,不能防止变量泄露。

  • 适合:需要在脚本运行时临时获取敏感信息且不希望留在屏幕历史记录的场景
  • 先看:脚本解释器是否为 bash,因为 -s 参数并非所有 shell 都支持
  • 建议:无论用哪种方式,退出脚本前必须确保终端回声设置被还原,否则会影响后续操作

命令速用版

如果你确定环境是 Bash,直接复制以下片段即可实现密码输入隐藏:

read -sp "请输入密码:" password
echo
echo "密码已接收,长度为 ${#password}"

如果是 POSIX sh 环境(如 dash),则需要手动控制终端状态:

stty -echo
read -p "请输入密码:" password
stty echo
echo

为什么会这样

终端默认会开启“回声”(echo)功能,你敲下的每个字符都会显示在屏幕上。隐藏密码的本质是临时关闭这个回声功能。Bash 的 read -s 选项内部就是调用了终端控制接口来关闭回声,输入结束后自动恢复。而 stty -echo 是更底层的命令,直接修改当前终端驱动设置,所以用完后必须手动开回来,否则你接下来的所有输入都看不见了。

分步处理

下面是一个比较完整的脚本示例,包含了错误处理和状态恢复:

#!/bin/bash# 定义清理函数,确保脚本退出时恢复终端设置
cleanup() {stty echoechoexit
}# 捕获中断信号,防止 Ctrl+C 导致终端无法回声
trap cleanup INT TERM# 关闭回声
stty -echo# 提示输入
printf "请输入密码:"
read password# 恢复回声
stty echo
echo# 后续逻辑
echo "输入完成"

每一步做完后,检查终端是否正常显示字符。如果在输入密码过程中按了 Ctrl+C,脚本应该能自动恢复回声,不会导致终端“瞎掉”。

怎么验证是否生效

运行脚本后,输入密码时观察屏幕是否有字符显示(包括星号)。正常情况下应该没有任何显示,只有光标移动。输入完成后按回车,看后续提示是否正常出现。另外,检查历史记录:

history | grep 脚本名

确认密码变量没有意外打印到日志或标准输出中。注意,即使屏幕上不显示,密码依然以明文形式存在于脚本变量的内存中,不要将其 echo 出来或写入日志文件。

常见坑

1. 忘记恢复回声:使用 stty -echo 后如果脚本报错退出,没有执行 stty echo,会导致整个终端会话无法显示输入字符,只能重新登录或手动重置。

2. 历史记录泄露:虽然输入时不显示,但如果脚本本身被记录在 history 中,或者密码被写入了某个日志文件,依然不安全。

3. 兼容性问题:read -s 是 Bash 特性,在 /bin/sh 指向 dash 的 Ubuntu 系统上可能无效,需指定解释器为 #!/bin/bash。

4. 变量残留:脚本结束后,环境变量可能残留,敏感脚本执行完后最好 unset 相关变量。

原文链接:https://www.zjcp.cc/ask/10972.html

http://www.jsqmd.com/news/806895/

相关文章:

  • macOS本地AI代理框架:轻量级架构、工具调用与安全实践
  • 80%的专业场馆选择!伸缩活动看台哪家好?山东阜康告诉你。生产活动座椅、生产伸缩座椅阜康用案例说话 - 栗子测评
  • 基于Web技术栈构建移动端抓娃娃模拟器:从物理引擎到交互实现
  • Word转LaTeX不再痛苦:3个步骤轻松搞定专业文档转换
  • 从零搭建强化学习环境:Mujoco、mujoco-py、gym与baseline一站式安装指南
  • Bose-Hubbard模型与量子Gibbs态模拟技术解析
  • 2026年热门的云南市政管道翻固化修复/云南市政管道机械螺旋缠绕修复综合评价公司 - 品牌宣传支持者
  • 从面试官视角看:NVIDIA/字节ASIC验证岗,他们到底想听你讲什么?
  • 5G手机开机后,第一眼看到的‘信号块’SSB到底是什么?手把手拆解PSS/SSS与PBCH
  • 基于OpenAI GPT-4 Vision API的Python库实战:图像识别与多模态AI应用开发
  • 终极暗黑2存档编辑器:5分钟掌握d2s文件修改完整指南
  • 2026年知名的台州漩涡风机/直流漩涡风机/高压漩涡风机推荐厂家精选 - 品牌宣传支持者
  • Cursor AI 开发副驾:从零构建结构化学习路径与自动化工作流
  • 为什么93%的开发者在WebRTC集成中卡在ElevenLabs音频缓冲层?——低延迟TTS流式传输终极调优方案
  • 2026年靠谱的宁波小型装载机/装载机可靠供应商推荐 - 行业平台推荐
  • 2026年评价高的云南河道清淤/昆明化粪池清洗/昆明市政管道智能检测/昆明医院管道检测品牌厂家推荐 - 品牌宣传支持者
  • VSCode差异编辑器JAI语言支持插件:原理、部署与实战
  • 用Matplotlib twinx()画双Y轴对比图:一个股价与成交量分析的完整案例
  • 基于Python的Telegram ChatGPT机器人部署与架构解析
  • 2026年评价高的昆明人气烧烤用户好评推荐 - 行业平台推荐
  • 如何在Windows上使用iperf3进行专业网络性能测试:完整免费指南
  • 开源巴西金融市场数据引擎:从数据管道到REST API的量化投资实践
  • 如何在Windows电脑上直接安装Android应用:3个简单步骤告别模拟器
  • 2026年LC光纤跳线定制厂家口碑榜权威发布:深圳市一诺盛世科技有限公司领衔 - 栗子测评
  • AI驱动零代码测试:基于MCP协议的Flutter跨平台自动化测试实践
  • YOLOv5网络魔改实战:用CBAM注意力机制替换C3模块,mAP真的提升了吗?
  • 从协议到实践:深入解读ISO 11898-1 CAN总线数据链路层
  • 微高压氧舱代理加盟哪家好?小心贴牌!认准超级源头厂家知青康养,微压氧舱十大品牌之一,家用厂家推荐不踩坑 - 栗子测评
  • PCI总线:从共享总线到现代计算机系统的基石
  • 2026年热门的泰兴水带/泥浆泵水带主流厂家对比评测 - 品牌宣传支持者