1

sshリモートホストにアクセスし、その後リモートでコマンドを実行できるプログラムがあります。コマンドは動作mkdircdますが、コマンドを実行しようとするとsudo su - username、プログラムがハングします。私のコードに欠けている/間違っているものがあるかどうか疑問に思っていました。

JSch jSch = new JSch();
Channel channel = null;
Session session = null;
InputStream in = null;        
String  username;
OutputStream  os  = null;;

try {   
    Properties conf = new Properties();
    conf.put("StrictHostKeyChecking", "no");

    jSch.addIdentity("id_rsa");
    jSch.setConfig(conf);
    session = jSch.getSession("username", "hostname", 22);      

    String cmd = "mkdir test";
    session.connect();   //   creating the ssh connection        

    channel = (ChannelExec) session.openChannel("exec");        
    ((ChannelExec)channel).setCommand(cmd);
    channel.setInputStream(null);
    in = channel.getInputStream(null);        
    channel.connect();  

    byte[] tmp = new byte[1024];        
    while (true) { 
        while (in.available() > 0) {
            int i = in.read(tmp, 0, 1024);
            if (i < 0) {
                break;
            }
        }
        if (channel.isClosed()) {
            break;
        }      
        try {
            Thread.sleep(1000);  // to wait for long running process ..                
        } catch (Exception ee) {
        }
        String value = new String(tmp);            
        System.out.println("input stream " + value);
    }     
}catch(Exception  e){
    e.printStackTrace();
}finally{
    channel.disconnect();
    session.disconnect();
    if(in!=null)
    in.close();
}

また、sshこのホストから別のホストに移動sudoする必要があるため、基本的にはssh、この問題が修正されたら、ゲートウェイのようなものを介してリモートホストに接続し、データベースに接続する必要があります。

これについての光は大歓迎です。

ありがとう。

4

1 に答える 1

1

sudo コマンドには pty が必要です。 exec チャネルで sudo を実行するには、http: //www.jcraft.com/jsch/examples/Sudo.java.htmlを参照してください。ジャンプホストについては、 http: //www.jcraft.com/jsch/ を参照してください。例/JumpHosts.java.html

于 2012-06-28T01:22:40.803 に答える