sudo登录后运行命令

我正在尝试执行下面的代码来执行sudo命令,但我不知道在sudo登录后如何执行命令

 String[] commands = {"sudo su - myname;","id"}; JSch jsch = new JSch(); String username = "myuser"; com.jcraft.jsch.Session session = jsch.getSession(username,"hostname", 22); session.setPassword("my@123"); session.connect(); Channel channel=session.openChannel("exec"); for(int a=0;a0){ int i=in.read(tmp, 0, 1024); if(i<0)break; System.out.print(new String(tmp, 0, i)); } if(channel.isClosed()){ System.out.println("exit-status: "+channel.getExitStatus()); break; } } } 

sudo su执行一个新的shell。

要向shell提供命令,您可以:

  • su命令行上指定命令,就像官方JSch Sudo.java示例所示:

     ((ChannelExec)channel).setCommand("sudo -S -p '' "+command); 
  • 或使用其标准输入将命令提供给shell,即与提供密码的方式相同:

     out.write(("command\n").getBytes()); 

    另请参阅sudo登录后使用Java JSch程序执行多个bash命令 。

通常,我建议使用第一种方法,因为它使用更好的API(命令行参数)。