Executando vários comandos bash usando um programa Java JSch após o login sudo

Eu estou tentando executar vários comandos bash através de um programa Java que se conecta a um SSH usando JSch. Mas depois do login do sudo , não consigo executar nenhum comando bash. Pelo que eu li, depois do login do sudo , entramos em um sub-shell. Eu quero usar um único canal. Eu não tenho ideia do que fazer a seguir.

 ChannelExec chnlex=(ChannelExec) session.openChannel("exec"); InputStream in = chnlex.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(in)); chnlex.setCommand("sudo -u appbatch -H /opt/apptalk/local/bin/start_shell.sh -c <<exit"); chnlex.connect(); System.out.println("channel connection done"); String msg=null; while((msg=br.readLine())!=null){ System.out.println(msg); } chnlex.disconnect(); System.out.println("channel disconnected"); 

Também alguém poderia me dizer como escrever esses comandos bash em uma function ou arquivo separado?

O sudo não executa um novo shell. Mas provavelmente o seu script start_shell.sh faz. Você provavelmente se refere ao sudo su . Talvez o seu script rode o su ?

De qualquer forma, para fornecer comandos ao shell, alimente os comandos usando a input padrão do shell:

 ChannelExec channel = (ChannelExec) session.openChannel("exec"); channel.setCommand("sudo su"); channel.connect(); OutputStream out = channel.getOutputStream(); out.write(("command1\n").getBytes()); out.write(("command2\n").getBytes()); out.flush(); 

O sudo / su são comandos como qualquer outro, então é realmente o mesmo que uma questão muito genérica:
Fornecendo input / subcomando para comando executado sobre SSH com JSch

Veja também o comando Running após o sudo login , que responde a uma questão mais genérica no sudo su , sem um uso pouco claro de algum shell script desconhecido.