我正在编写一个UNIX shell函数,该函数将执行一个命令,提示用户输入密码。我希望将密码硬编码到脚本中,并将其提供给命令。我尝试过将密码输入到命令中,如下所示:
function() {
echo "password" | command
}
这对于某些命令可能不起作用,因为命令可能在提示输入密码之前刷新输入缓冲区。
我也尝试过将标准输入重定向到包含密码的文件中,如下所示,但也不起作用:
function() {
echo "password" > pass.tmp
command < pass.tmp
rm pass.tmp
}
我知道有些命令允许将密码作为参数提供,但我宁愿使用标准输入。
我正在寻找一种快速而又简单的方法,在bash中将密码输入命令。
8条答案
按热度按时间jhiyze9q1#
如何使用自动预期将密码通过管道输入命令:
这些步骤是在Ubuntu 12.10桌面上演示的,您的发行版的具体命令可能会略有不同。
这是危险的,因为您可能会将您使用的密码暴露给任何可以读取自动预期脚本文件的人。
不要暴露您的根密码或超级用户密码管道通过期待像这样。根工具包将发现这在瞬间和您的方块是拥有的。
EXPECT生成一个进程,读取进来的文本,然后发送脚本文件中预定义的文本。
1.请确保已安装
expect
和autoexpect
:1.仔细阅读:
1.转到您的主目录:
1.用户
el
无法将文件的所有权更改为root,必须输入密码:1.这是我们希望自动输入的密码。重新启动终端以确保sudo再次要求我们输入密码。再次转到/home/el并执行以下操作:
1.您已经创建了
my_test_expect.exp
文件。您的超级机密密码以纯文本形式存储在此文件中。这会使您非常不舒服。请尽可能限制权限和所有权,以减轻您的不适感:1.您可以在
my_test_expect.exp
的底部看到以下命令:1.你需要验证上面的expect命令是否正确。如果autoexpect脚本过于敏感或不够敏感,那么它将挂起。在这种情况下,这是可以接受的,因为expect正在等待总是会到达的文本。
1.以用户el身份运行expect脚本:
myfile.txt
:它之所以有效是因为它是root用户,而且el从来没有输入过密码。如果你用这个脚本暴露了你的root、sudo或超级用户密码,那么在你的机器上获得root用户就很容易了。这是对一个让每个人都能毫无疑问地进入的安全系统的惩罚。
gpnt7bae2#
看一看
autoexpect
(HERE教程),它是你不需要使用技巧就能得到的最快最脏的教程。oxosxuxt3#
您可以使用
-S
标志从标准输入读取数据。toiithl64#
安全命令不会允许这样做,我想这是正确的, -这是一个你可以开卡车通过的安全漏洞。
如果您的命令不允许使用输入重定向、命令行参数或配置文件,那么您将不得不采取严重的欺骗手段。
一些应用程序实际上会打开
/dev/tty
,以确保你很难破解安全性。你可以通过临时接管/dev/tty
来绕过它们(例如,创建自己的管道),但这需要很高的特权,甚至可以破解它。lpwwtiir5#
带有
read
下面的例子使用
read
获取密码并将其存储在变量pass
中,然后7z
使用该密码创建一个加密存档:但要注意,密码可以easily be sniffed。
gtlvzcf86#
提示输入密码的程序通常会将tty设置为“raw”模式,并直接从tty读取输入。如果你在一个pty中生成子进程,你可以让它工作。这就是Expect所做的...
2nbm6dog7#
只需用途:
这段代码对我来说是有效的,它位于/etc/init.d/myscriptbash.sh
rkue9o1l8#
这是一个非常不安全的想法,但是:Using the passwd command from within a shell script