Выполните команду оболочки linux с "sudo", используя java, не вводя требуемый пароль - PullRequest
4 голосов
/ 02 марта 2011

Привет! Я использую java-библиотеку ganymed-ssh2 для успешного выполнения удаленных команд на рабочей станции linux.

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

sudo /usr/bin/some_process
please enter your password:  

Я использовал для реализации удаленного выполнения cmd следующим образом:

Session sess = conn.openSession();

sess.execCommand("uname -a && date && uptime && who");

System.out.println("Here is some information about the remote host:");

InputStream stdout = new StreamGobbler(sess.getStdout());

BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

while (true)
{
  String line = br.readLine();
  if (line == null)
  break;
  System.out.println(line);
}


System.out.println("ExitCode: " + sess.getExitStatus());

sess.close();

conn.close();

Боюсь, что невозможно выполнить команды, требующие пароль сэта библиотека.

Кто-то может дать мне решение или альтернативу, чтобы разрешить это ???

Thx!

Ответы [ 3 ]

2 голосов
/ 02 марта 2011

при условии, что sess.getStdin(), вы должны иметь возможность передать пароль к команде sudo.

1 голос
/ 02 марта 2011

Самое простое решение - дать пользователю, который входит в Java-программу, возможность выполнять эту команду sudo без ввода пароля. Вы можете сделать это, запустив visudo на хосте и введя NOPASSWD после данной команды. Подробнее см. man 8 visudo.

0 голосов
/ 02 марта 2011

Самое простое, что можно сделать - это, вероятно, использовать аутентификацию с открытым ключом . Таким образом, вам не нужен пароль.

Редактировать: Я был введен в заблуждение, что этот вопрос был о SSH, когда на самом деле речь идет о sudo. В этом случае решение Кодзиро является правильным: отредактируйте файл /etc/sudoers, используйте флаг NOPASSWD.

...