Выполните команду оболочки 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
флаг.