【问题标题】:Is there a way to see characters typed for an su password有没有办法查看为 su 密码键入的字符
【发布时间】:2012-08-30 20:54:33
【问题描述】:

我正在编写一个可能需要 su 来运行命令的 bash 脚本。像这样-

echo "安装 XYZ 系统" echo "请输入root密码-" su -c "java -cp ./Installer.jar com.company.FmMain ; 退出"

有没有办法让 su 打印字符(星号之类的),以便用户在输入密码时获得一些视觉反馈?

【问题讨论】:

  • 是的。抓住“su”的来源,重写它,让它反馈并让用户安装它。
  • 我认为没有任何标准命令,但您可能会在 superuser.com 上找到更多帮助。
  • 不修改源代码是不可能的。

标签: linux bash su


【解决方案1】:

您必须首先将密码读入su 之外的变量中。有关使用 read 完成此操作的示例,请参阅问题 How do I echo stars (*) when reading password with `read`?

然后,您必须使用expect 将此密码传递给su 提供的密码提示。请参阅问题How do I use expect to connect via ssh to a system and change the password of the host system? 以获取执行类似操作的示例。

【讨论】:

  • 太好了,非常感谢。这些链接正是我想要的。
【解决方案2】:

我不建议在 Linux 中使用屏蔽密码,因为它违背了预期的正常行为,并且可能会使用户感到困惑,特别是如果他们是有经验的 Linux 用户。读取密码的标准方法是在接受密码之前关闭回显并禁用对特殊字符(如转义序列等)的处理(这通常通过设置终端属性 - tcsetattr 等来完成),这就是 su 的工作方式。

有诸如 getpass 之类的标准库函数可以为您执行此操作: http://www.gnu.org/s/hello/manual/libc/getpass.html

尝试实现您自己的方法会带来潜在的安全隐患。我强烈警告这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多