Как отправить пользовательский ввод на терминал из Java-программы (т.е. программно)?

Я выполняю команду из Java-программы, как

Process myProcess = Runtime.getRuntime().exec("sudo cat /etc/sudoers"); //It asks for password so I send password through outputstream from my program.

InputStream inputStream = myProcess.getInputStream();
OutputStream outputStream = myProcess.getOutputStream();
outputStream.write("mypassword".getBytes()); // write password in stream
outputStream.flush();
outputStream.close();

Но проблема в том, что он снова запрашивает у меня пароль, так как я уже отправляю пароль через outputtream из моей программы. Для решения этой проблемы я пытался много раз, но на самом деле не сделал.

Используя сценарий оболочки, я могу предоставить пароль для терминала, и моя программа работает нормально, но это не самый гибкий способ.

Можете ли вы предложить мне какой-либо способ предоставления пароля через мою Java-программу? (вместо программирования оболочки)

1 ответ

Вы можете сделать это с помощью -S вариант sudo:

String[] cmd = {"/bash/bin","-c","echo yourpassword| sudo -S your command"}; 
Runtime.getRuntime.exec(cmd); 

Но я не уверен, что это рекомендуется.

Я не автор, я нашел это там: http://www.coderanch.com/t/517209/java/java/provide-password-prompt-through-Java

Другие вопросы по тегам