是否可以在shell脚本上传递密码?


11

很长时间以来我一直在寻找,我想知道是否可以在shell脚本中传递密码?许多答案都没有。最近,我读了一篇文章,指出如何在Shell脚本中传递密码。我已经尝试过了,但是似乎没有用。这是链接。任何人都可以签出并还原吗?还请说我有办法在shell脚本中传递密码吗?如果没有人说我如何linux如何获取密码输入?

Answers:


12

通过“输入密码”,您可能意味着输入数据而对用户不可见。

(由geirha建议)使用bash时,可以使用该-s选项来防止显示键入的字符:

read -p "Password please: " -s pass

或者,更改终端的行为以使用stty -echo(禁用echo)隐藏键入的字符。在将密码内置在外壳程序中后,将其读read入变量(在下面的示例中为$pass),然后使用再次将其打开stty echo。由于新行从Enter被隐藏到,因此您必须打印换行以在新行上获得将来的输出。

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

read并且printf是shell内置的。由默认安装sttycoreutils软件包提供。这意味着该代码片段非常易于移植。

注意:该-p选项不是标准选项,而是的bash。如果需要在其他shell中显示提示,请使用:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

参考文献:


我只想在脚本中提供远程系统的root密码。您有可能吗?
karthick87

@ karthick87:不,此脚本仅捕获用户以交互方式键入的数据。如果要在脚本中输入root密码,为什么不考虑基于密钥的登录?
Lekensteyn 2011年

1
Bash的读取还具有在行中读取时禁用回显的选项。请参阅help '\read'
盖尔哈2011年

zsh它是可以实现的通过read -s 'pw?Prompt text',其中pw是其中密码将被放置和可变-s是一个标志,隐藏输入。
baldrs

2

您要将密码传递给哪个程序?

链接上的脚本对我有用。请注意,这不是Shell脚本,而是Expect脚本(需要expect安装软件包`)。使用Expect是自动化基于文本的交互式程序的常用方法。

非交互式ssh登录通常使用带有空密码短语的基于密钥的身份验证来完成。

其他一些程序(如sudo)具有从stdin读取密码的选项。

提供密码作为命令行选项通常是一个安全问题,因为在大多数系统上,任何用户都可以使用诸如的简单工具看到其他用户进程,包括那里的命令行参数ps


我只想将密码传递给ssh程序。
karthick87

因此,也许密钥身份验证对您有用:ssh-keygen用于创建身份验证密钥(在要求输入密码时只需按Enter键),然后使用将其复制到远程用户ssh-copy-id。如果为sshd启用了密钥身份验证(默认情况下),则ssh将不要求您输入密码。
Florian Diesch 2011年


0

有一种方法可以将密码存储在bash脚本中,但是您必须对脚本进行加密,以使没人能真正读取它,或者在该脚本上运行任何类型的调试器以查看其工作情况。要加密bash / shell脚本并使其实际可执行,请尝试在此处复制并粘贴

在上面的页面上,您要做的就是提交脚本(您可以先提交示例脚本以省心)。将为您生成一个zip文件。右键单击下载链接,然后复制您提供的URL。然后,转到UNIX框并执行以下步骤。

安装:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

上面的安装命令将为您执行以下操作:

  1. 它将加密的脚本安装在目录中/var/tmp/KINGLAZY/SHIELDX-(your-script-name)

  2. 它将在您指定的替换目录中放置指向此加密脚本的链接,以这种/home/(your-username)方式,它使您无需键入绝对路径即可轻松访问该脚本。

  3. 确保没有人可以修改脚本-任何尝试修改加密脚本的操作都将使其无法操作...直到这些尝试被停止或删除。

  4. 确保绝对没有人可以复制它。没有人可以将您的脚本复制到一个僻静的位置,然后尝试修改它,以查看其工作原理。脚本的所有副本都必须是指向您在安装过程中指定的原始位置的链接

注意:

我认为这不适用于提示用户作出响应的交互式脚本。这些值应硬编码到脚本中。加密确保没有人能真正看到这些值,因此您不必担心。


-1

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

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

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.