使用java执行带有“sudo”的linux shell命令,而不输入所需的密码

时间:2011-03-02 14:22:09

标签: java passwords cmd sudo

您好我正在使用ganymed-ssh2 java库在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 个答案:

答案 0 :(得分:2)

假设有一个sess.getStdin(),您应该能够输入sudo命令的密码。

答案 1 :(得分:1)

最简单的解决方案是向用户提供Java程序登录,以便能够在不输入密码的情况下运行该sudo命令。您可以通过在主机上运行visudo并在给定命令后输入NOPASSWD来实现。有关详细信息,请参阅man 8 visudo

答案 2 :(得分:0)

最简单的方法是使用public key authentication。这样你就不需要密码了。

编辑:我误导了这个问题是关于SSH的,实际上这是关于sudo的。在这种情况下,kojiro的解决方案是正确的:编辑/etc/sudoers文件,使用NOPASSWD标志。