2017-03-06 71 views
0

我尝试在脚本中使用vi命令,另外我尝试在同一个脚本中传递sudo密码。所以我有这样的:从管道读取sudo密码

echo mypassword | bash -c "echo $'Goappendthis\E:x\n' | sudo vi /etc/test" 

vi命令成功,但它仍然不断询问密码。我怎样才能做到这一点没有密码,所以我可以在脚本中运行多个主机相同的命令?

+1

BTW,调用它作为'ex'会把'vi'设计成非交互式的使用,或者使用'模式VI -s scriptfile'将读取的vi命令,从运行'scriptfile'。 –

+0

感谢您的意见。奇怪的是,公司明智的政策不会允许我使用sed,awk,python或perl一行来更改根文件。看起来它只是允许使用sudo vi修改文件,并且由于我有数百个主机需要修改,所以我需要找到一种方法来自动执行此操作。 所以基本上我需要运行sudo vi相同的文件在文件末尾添加一行并保存。我怎么能做到这一点呢? – JavaRed

+1

即使您遵守保单的信件,您当然也不会遵守其中的精神。无论如何,典型的正确的事情是使用由您的公司用来模拟文件生成的任何编排系统提供的工具 - 木偶,厨师,SaltStack,CFEngine等等。 –

回答

0

第一:不要这样做。使用不需要密码的特权升级机制。

第二:除非给出-S--stdin,sudo直接从TTY读取密码,而不是从stdin读取密码。

第三:您需要将密码指向sudo的标准输入而不是也会覆盖vi的标准输入。这样做,可能看起来像以下:

echo mypassword | sudo --stdin -- bash -c "echo $'Goappendthis\E:x\n' | vi /etc/test" 
+0

我知道这不是理想的解决方案,但现在我可以用作解决方法。非常感谢。 – JavaRed