是否可以通过 shell 脚本传递密码?

是否可以通过 shell 脚本传递密码?

我搜索了很久,我想知道是否可以在 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'

readprintf是 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

答案4

你可以简单地做这样的事情。

# echo -e "password_here\npassword_here" | su user

来源

相关内容