通过ssh运行sudo命令

时间:2014-05-22 09:20:04

标签: java linux ssh

我正在尝试从远程Linux机器上的java代码运行命令sudo -u [USER] [COMMAND],但没有任何反应。我使用ganymed-ssh2 jar。当我在没有sudo的情况下运行命令时,它的工作非常完美。

此外,如果我从Linux机器运行sudo -u [USER] [COMMAND],它也可以完美运行。我如何从java运行此命令?

Connection conn= SshConnection.GetConnection(hostname, username, password)

Session sess= conn.openSession(); 

sess.execCommand(command);

2 个答案:

答案 0 :(得分:2)

您需要获取安全流并传递密码。

Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand("sudo -S -p '' " + command);
channel.setInputStream(null);
OutputStream out = channel.getOutputStream();
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
((ChannelExec) channel).setPty(true);
channel.connect();
out.write((password + "\n").getBytes());
out.flush();;

从这里采取:http://codeflex.co/java-run-sudo-command-on-remote-linux-host/

答案 1 :(得分:1)

如果服务器上的sudoers配置允许给定用户在另一个用户的名称中执行此特定命令,而不是要求输入密码,则只能远程运行此命令(即{{1} } 选项)。 NOPASSWD的密码输入只能是键盘交互式,您无法远程执行。