2013-01-08 33 views
7

Java - Jsch sudoコマンド。私はJSCHを使用していますし、私の仕事は、サーバーにログインし、次のコードを使用してJSCH sudo suコマンド "tty"エラー

sudo su - bumboo 

を、次のようなコマンドを実行することです、私は正常に接続できていますが、私は、コマンドを実行しようとすると、それは私にエラーsudo: sorry, you must have a tty to run sudo

を与える

彼らは

0を使用することをお勧めsudo.java可能な例では私のコードである

public static Channel sudoBamboo(Session session, String sudo_pass) throws Exception { 

     ChannelExec channel = (ChannelExec) session.openChannel("exec"); 
     //SUDO to bamboo user 
     String command = "sudo su - bumboo"; 
     channel.setCommand(command); 

     //InputStream in = channel.getInputStream(); 
     channel.setInputStream(null, true); 

     OutputStream out = channel.getOutputStream(); 
     //channel.setErrStream(System.err); 
     channel.setOutputStream(System.out, true); 
     channel.setExtOutputStream(System.err, true); 
     //Test change 
     //channel.setPty(false); 
     channel.connect(); 

     out.write((sudo_pass + "\n").getBytes()); 
     out.flush(); 

     return channel; 
    } 

JSCH後

// man sudo 
     // -S The -S (stdin) option causes sudo to read the password from the 
     //  standard input instead of the terminal device. 
     // -p The -p (prompt) option allows you to override the default 
     //  password prompt and use a custom one. 
     ((ChannelExec)channel).setCommand("sudo -S -p '' "+command); 

が、私は"sudo -S -p - su bamboo"のようなコマンドを実行すると、まだ私に任意のヘルプは感謝

同じエラーを与えます。

答えて

10

は、それは私

String command = "sudo su - bumboo"; 
channel.setPty(true); 
のために働いていました
関連する問題