Java 通过ssh运行sudo命令
我试图在远程Linux机器上从java代码运行命令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
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。