2017-10-13 14 views
1

複数のbashコマンドをJSchを使用してSSHに接続するJavaプログラムで実行しようとしています。しかし、sudoログイン後、私はbashコマンドを実行することができません。私が読んだことから、sudoログイン後、サブシェルに入る。私は単一のチャンネルを使いたい。私は次に何をすべきかについて断然です。sudoログイン後にJava JSchプログラムを使用して複数のbashコマンドを実行する

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"); 

また、別の機能やファイルでこれらのbashコマンドを書く方法を教えてもらえますか?

答えて

1

sudoは新しいシェルを実行しません。しかし、おそらくあなたのstart_shell.shスクリプトがします。 sudo suを参照している可能性があります。スクリプトでsuが実行されている可能性がありますか?シェルの標準入力を使用してコマンドを送り、シェルにコマンドを提供するために、とにかく

、:

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(); 

sudo/suは、他のどのようなコマンドですので、実際には非常に一般的なのと同じです質問:
Providing input/subcommands to command executed over SSH with JSch

またRunning command after sudo loginを参照してください、叔父せず、sudo suのより一般的な質問に答えますいくつかの未知のシェルスクリプトを使用しています。

関連する問題