title: Multiple commands using JSch
body: <p>My requirement is as follow:<br>
  I have to login to Unix box using my credentials and once login, I have to do sudo to different user. Once sudo is successful, I have to invoke shell in nohup. On completion of executions, close channel and session both.</p>
  
  <p>I tried the first step which is connect using sudo command, but I don't know how to invoke shell script after the sudo command.   </p>
  
  <p>In the below code I am able to execute sudo command,  but after getting sudo access how can I execute a shell in nohup with user <code>masteruser</code>. So that required files created my shell has owner as <code>masteruser</code>.</p>
  
  <pre><code>public class SSHUploader {
  
      Session session = null;
  
      public SSHUploader(){
  
      }
  
      public void connect(){
      try {
  
              JSch jsch = new JSch();
              session = jsch.getSession("user", "xxx.xxx.xx.xx", 22);
              session.setPassword("test");
              java.util.Properties config = new java.util.Properties();
              config.put("StrictHostKeyChecking", "no");
              session.setConfig(config);
              session.connect();
          } catch (Exception ex) {
              ex.printStackTrace();
          }
      }
  
      public void executeCommand(String script) throws JSchException, IOException{
          System.out.println("Execute sudo");
          String sudo_pass = "test";
          ChannelExec channel = (ChannelExec) session.openChannel("exec");
          ((ChannelExec) channel).setCommand( script);
  
          InputStream in = channel.getInputStream();
          OutputStream out = channel.getOutputStream();
          ((ChannelExec) channel).setErrStream(System.err);
  
          channel.connect();
          out.write((sudo_pass + "\n").getBytes());
          out.flush();
  
          byte[] tmp = new byte[1024];
          while (true) {
              while (in.available() &gt; 0) {
                  int i = in.read(tmp, 0, 1024);
                  if (i &lt; 0)
                      break;
                  System.out.print(new String(tmp, 0, i));
              }
              if (channel.isClosed()) {
                  System.out.println("exit-status: " + channel.getExitStatus());
                  break;
              }
              try {
                  Thread.sleep(1000);
              } catch (Exception ee) {
                  System.out.println(ee);
              }
          }
          channel.disconnect();
          System.out.println("Sudo disconnect");
      }
  
      public void disconnect(){
          session.disconnect();
      }
  
  
      public static void main(String... args) throws JSchException, IOException {
  
          SSHUploader up = new SSHUploader();
          up.connect();
  
          up.executeCommand("sudo -u masteruser bash");
  
          up.disconnect();
      }
  
  }
  </code></pre>