1

我有一个程序可以ssh进入远程主机并在此之后远程执行命令。命令喜欢mkdir并且cd可以工作,但是当我尝试执行该命令时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在 I 之后从这台主机到另一台主机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 回答