Как ввести пароль для sudo, используя Java Runtime? - PullRequest
1 голос
/ 15 марта 2012

Мне нужно выполнить данные команды как пользователь root и sudo, используя Java.Однако я не уверен в способе, который я могу использовать для передачи пароля.Есть ли способ, с помощью которого я могу передать пароль на терминал?

Ответы [ 7 ]

3 голосов
/ 15 марта 2012

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

Наличие пароля root в программе, который должен быть открытым текстом на каком-то этапе, на самом деле менее надежно

1 голос
/ 14 июня 2013

Переход с одного компьютера на другой с использованием ssh или scp можно выполнить, если вы настроите ssh без пароля.Это один метод, который используется для кластеров машин, которые должны работать вместе и управляться головным узлом.Например, hadoop использует этот метод.

1 голос
/ 15 марта 2012

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

chmod +s myscript && chown root myscript && chgrp root myscript

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

1 голос
/ 15 марта 2012

Обычно sudo читает пароль, работая непосредственно на терминале.Вы должны использовать sudo -S здесь.С помощью этой опции он будет пытаться прочитать пароль из стандартного ввода, а затем вы сможете отправить его через OutputStream, полученное из Process, созданного Runtime.exec() при запуске команды.

0 голосов
/ 20 июня 2013

Мне нужно было использовать ProcessBuilder для запуска tcpdump. Вот как я это сделал:

visudo myuser ALL = NOPASSWD: / usr / sbin / tcpdump

Тогда моя команда из Java была запущена из myuser: / usr / bin / sudo / usr / sbin / tcpdump -i порт eth0 8561 ...

0 голосов
/ 15 марта 2012

Как уже упоминалось, ребята, вы можете использовать sudo, только если ваше текущее использование настроено в системе как то, которое может работать sudo. В противном случае (в общем случае) вы должны ввести пароль.

Вам необходимо ввести пароль, если вы хотите запускать команды на удаленных компьютерах, а также с помощью ssh или удаленно копировать файлы с помощью scp.

Некоторые команды могут принимать пароль в качестве параметра командной строки. Например, утилита mysql может принять пароль после переключения -p. Некоторые другие команды более строгие: они не исключают пароль в командной строке и даже не позволяют вводить пароль через перенаправление ввода stdin процесса. Примерами являются ssh и scp.

Единственный способ убедиться, что вы всегда можете программно запустить любую команду, требующую ввода пароля, - это эмулировать терминал. Это то, что делает утилита expect. Взгляните на его справочную страницу: http://linux.die.net/man/1/expect

Я использовал expect в прошлом. это утилита, управляемая сценариями, которая позволяет имитировать действия пользователя точно так же, как это делает пользователь, когда он работает с терминалом. Мы запустили ожидаемый скрипт из java как обычный внешний процесс, используя ProcessBuilder.

0 голосов
/ 15 марта 2012

Будет лучше, если вы создадите скрипт на терминале и вызовете его из Java (используя Runtime.exec)

...