2017-01-16 12 views
2

Я пытаюсь выполнить код ниже, чтобы выполнить 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("[email protected]"); 
session.connect(); 
Channel channel=session.openChannel("exec"); 
for(int a=0;a<=commands.length;a++){ 
    ((ChannelExec)channel).setCommand("sudo su - myname;"); 
    ((ChannelExec)channel).setErrStream(System.err); 
    ((ChannelExec) channel).setPty(true); 
    channel.connect(); 
    System.out.println("id *******"); 
    OutputStream out=channel.getOutputStream(); 
    out.write(("[email protected]\n").getBytes()); 
    out.flush(); 
    InputStream in=channel.getInputStream(); 
    byte[] tmp=new byte[1024]; 
    while(true){ 
     while(in.available()>0){ 
      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; 
     } 
    } 
} 
+0

Я не вижу попытки выполнить комментарий в вашем коде. Так в чем проблема? –

+0

Привет В этом проблема. Я не уверен, как передавать команды после входа в sudo. – Srinivas

ответ

0

sudo su выполняет новую оболочку.

Чтобы обеспечить команду оболочки вы либо:

В целом, я рекомендую первый подход, поскольку он использует более совершенный API (аргумент командной строки).

+0

Я добавил то же самое, но его печать по команде, но не действие/выход. – Srinivas

+0

Что такое * "same" *? Я предложил два подхода. Что вы использовали? Я рекомендую первый. –

+0

OutputStream out = channel.getOutputStream(); \t \t out.write (("id \ n"). GetBytes()); \t \t out.flush(); Я использовал этот подход – Srinivas