Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过ssh运行sudo命令_Java_Linux_Ssh - Fatal编程技术网

Java 通过ssh运行sudo命令

Java 通过ssh运行sudo命令,java,linux,ssh,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) Sessi

我试图在远程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);

只有当服务器上的
sudoers
配置允许给定用户以其他用户的名义执行此特定命令时,才能远程运行此命令(即
NOPASSWD
选项)。
sudo
的密码输入只能通过键盘进行交互,而不能远程执行

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

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

摘自此处:

在使用
sudo
运行comand时,您是否应该提及密码?或者,您的用户被标记为NOPASSWD is sudoers file?它在没有密码的情况下工作。此处是否有任何输出?如果
sudoers
配置允许给定用户以另一用户的名义执行此特定命令,则只能远程运行此命令,而不要求输入密码。关于非交互的部分并不完全正确,如果API需要伪造交互式会话,那么完全可以使用远程提供密码的API。