如何提供密码给一个在bash中提示的命令?

如何提供密码给一个在bash中提示的命令?,第1张

概述如何提供密码给一个在bash中提示命令

我在写一个UNIX shell函数,它将执行一个命令,提示用户input密码。 我想将密码硬编码到脚本中并提供给命令。 我已经尝试将密码input到命令中,如下所示:

function() { echo "password" | command }

这可能不适用于某些命令,因为在提示input密码之前,命令可能会刷新input缓冲区。

我也试着将标准inputredirect到一个包含这样的密码的文件,但是这也不起作用:

function() { echo "password" > pass.tmp command < pass.tmp rm pass.tmp }

我知道有些命令允许将密码作为参数提供,但我宁愿通过标准input。

PHP exec用IIS更改windows密码

密码掩码字符

如何让Mac和windows用户更改他们的AD密码?

git – 不要求在拉的密码

LM20_PWLEN返回最小密码长度还是最大密码长度?

我正在寻找一个快速和肮脏的方式在bash中input密码到一个命令。

如何在windows中使用Python修改密码到期?

密码信息

现代Unix / linux系统上的密码仍然限制在8个字符以内?

通过ssh在linux服务器上更改密码的脚本

我在linux上调用什么API来设置用户密码?

看看autoexpect (体面教程这里 )。 这是尽可能快而又脏,你可以得到而不诉诸于欺骗。

如何使用autoexpect将密码输入到命令中:

这些步骤用Ubuntu 12.10桌面来说明。 您的分配确切的命令可能会稍有不同。

这是很危险的,因为你冒任何可以读取autoexpect脚本文件的人冒任何密码的风险。

不要暴露你的root密码或高级用户密码通过管道他们通过这样的期望。 根工具包会立即发现,你的箱子是拥有的。

EXPECT产生一个进程,读取进入的文本,然后在脚本文件中发送预定义的文本。

确保你有expect和autoexpect expect安装:

sudo apt-get install expect sudo apt-get install expect-dev

阅读它:

man expect man autoexpect

转到您的主目录:

cd /home/el

用户el无法将文件chown到root并且必须输入密码:

touch testfile.txt sudo chown root:root testfile.txt [enter password to authorize the changing of the owner]

这是我们想要自动化的密码输入。 重新启动终端,以确保sudo再次要求我们输入密码。 再次进入/ home / el并执行此 *** 作:

touch myfile.txt autoexpect -f my_test_expect.exp sudo chown root:root myfile.txt [enter password which authorizes the chown to root] autoexpect done,file is my_test_expect.exp

你已经创建了my_test_expect.exp文件。 你的超级秘密密码是存储在这个文件的明文。 这应该让你非常不舒服。 尽可能地限制权限和所有权来缓解一些不适:

sudo chown el my_test_expect.exp //make el the owner. sudo chmod 700 my_test_expect.exp //make file only readable by el.

您可以在my_test_expect.exp的底部看到这些命令:

set timeout -1 spawn sudo chown root:root myfile.txt match_max 100000 expect -exact "[sudo] password for el: " send -- "YourPasswordStoredInPlaintextr" expect eof

您将需要验证上面的expect命令是否合适。 如果autoexpect脚本过于敏感或不够敏感,则会挂起。 在这种情况下,这是可以接受的,因为期望等待文本总是到达。

以用户el的身份运行expect脚本:

expect my_test_expect.exp spawn sudo chown root:root myfile.txt [sudo] password for el:

包含在my_test_expect.exp中的密码被用户el通过管道传送到根。 要查看密码是否被接受,请查看myfile.txt :

ls -l -rw-r--r-- 1 root root 0 Dec 2 14:48 myfile.txt

它工作,因为它是根,并从来没有输入密码。 如果你用这个脚本暴露你的root,sudo或者高级用户密码,那么在你的机器上获取root会很容易。 这是一个安全系统的惩罚,让大家不问任何问题。

安全的命令不会允许这样做,而且,我担心 – 这是一个安全漏洞,你可以驾驶卡车通过。

如果你的命令不允许使用输入重定向,命令行参数或配置文件,那么你将不得不采取严重的欺骗手段。

一些应用程序实际上会打开/dev/tty以确保您在安全性方面遇到困难。 你可以通过暂时接管/dev/tty (例如创建你自己的管道)来绕过它们,但是这需要严重的特权,甚至可以被打败。

您可以使用-S标志从std输入读取。 查找下面的例子:

function shutd() { echo "mySuperSecurePassword" | sudo -S shutdown -h Now }

提示输入密码的程序通常将tty设置为“raw”模式,并直接从tty读取输入。 如果你在pty中产生子进程,你可以做这个工作。 Expect就是这么做的

只需使用:

echo "password" | sudo -S mount -t vfat /dev/sda1 /media/usb/; if [ $? -eq 0 ]; then echo -e '[ ok ] Usb key mounted' else echo -e '[warn] The USB key is not mounted' fi

这段代码适用于我,并在/etc/init.d/myscriptbash.sh中

这是一个非常不安全的想法,但是: 在shell脚本中使用passwd命令

总结

以上是内存溢出为你收集整理的如何提供密码给一个在bash中提示的命令?全部内容,希望文章能够帮你解决如何提供密码给一个在bash中提示的命令?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1292826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存