我搜索了很久,我想知道是否可以在 shell 脚本中传递密码?许多答案都说不行。最近我读了一篇文章,介绍了如何在 shell 脚本中传递密码。我试过了,但似乎不起作用。这是关联。有人能检查并恢复吗?另外请告诉我有没有办法在 shell 脚本中传递密码?如果没有,请告诉我 Linux 如何获取密码输入?
答案1
通过“输入密码”,您可能意味着在用户不可见的情况下输入数据。
(geirha 建议) 使用 bash 时,可以使用以下-s
选项来防止显示输入的字符:
read -p "Password please: " -s pass
stty -echo
或者,使用(禁用)更改终端的行为以隐藏输入的字符echo
。使用内置的 shell 将密码读取read
到变量中(在下面的示例中为$pass
)后,使用 将其重新打开stty echo
。由于从 到 的新行Enter被隐藏,因此您必须打印一个换行符才能在新行上获得将来的输出。
stty -echo
read -p "Password please: " pass
stty echo
printf '\n'
read
和printf
是 shell 内置函数。stty
由默认安装的软件包提供coreutils
。这意味着此代码片段非常易于移植。
注意:该-p
选项不是标准的,而是来自bash
。如果需要在其他 shell 中显示提示符,请使用:
printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'
参考:
答案2
您想将密码传递给哪个程序?
链接上的脚本对我有用。请注意,这不是 shell 脚本,而是 expect 脚本(需要expect
安装包)。使用 expect 是自动化基于文本的交互式程序的常用方法。
非交互式ssh
登录通常使用基于密钥的身份验证和空密码来完成。
一些其他程序(如sudo
)有从标准输入读取密码的选项。
提供密码作为命令行选项通常是一个安全问题,因为在大多数系统上,任何用户都可以使用简单的工具(如)查看其他用户的进程,包括命令行参数ps
。
答案3
脚本永远不应该真正处理密码。让需要密码的应用程序自己询问密码,如果这不可能,请找到更好的应用程序身份验证方法。请阅读http://mywiki.wooledge.org/BashFAQ/069