我在写一个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中提示的命令?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)