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

嗨,我正在使用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(); 

我担心执行需要使用此库的密码的命令是不可能的。

有人可以给我一个解决方案或替代方案允许这个???

谢谢!

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

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

最简单的方法是使用公钥认证 。 这样你就不需要密码了。

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