开发者

Execute a linux shell command with "sudo" using java, without entering the required password

开发者 https://www.devze.com 2023-02-14 14:01 出处:网络
Hi I\'m using ganymed-ssh2 java library to execute remote commands in linux workstation with success.

Hi I'm using ganymed-ssh2 java library to execute remote commands in linux workstation with success.

But now there is a situation where I need to execute a command but this require that i put some password...like:

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

I used to implement remote cmd execution in this way:

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();

I'm afraid that it's not possible to execute commands that require a password with this library.

Someone 开发者_开发技巧could give me a solution or alternative to allow this ???

Thx!


assuming there is a sess.getStdin(), you should be able to pipe in a password to the sudo command.


The easiest solution would be to give the user that Java program logs in as the ability to run that sudo command without entering the password. You can do that by running visudo on the host and entering NOPASSWD after the given command. See man 8 visudo for more details.


The easiest thing to do is probably to use public key authentication. That way you don't need a password.

Edit: I was mislead that this question was about SSH, when in fact it's about sudo. In that case kojiro's solution is the correct one: edit the /etc/sudoers file, use the NOPASSWD flag.

0

精彩评论

暂无评论...
验证码 换一张
取 消