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

Привет! Я использую 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();

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

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

Спасибо!

3 ответа

Решение

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

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

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

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

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