2017-03-06 91 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