在JSch中读取上一个命令的响应后执行命令

时间:2015-01-13 17:51:26

标签: java ssh inputstream jsch

我想使用JSch执行2个命令,但它们不应该一起使用。我这样做是为了从网关连接到服务器(因此命令ssh servername)

第一个命令:ssh servername 第二个命令:密码

我尝试了多种方法,但他们继续堆叠在一起。

        JSch jsch = new JSch();

        gateway = jsch.getSession(username, host, port);
        gateway.setPassword(password);
        gateway.setConfig(SessionPool.defaultSessionConfig());
        gateway.setHostKeyAlias(host);
        gateway.connect(20000);
        System.out.println("Session created");
channel = gateway.openChannel("shell");
        OutputStream ops = channel.getOutputStream();
        PrintStream ps = new PrintStream(ops, true);

        channel.connect();
        ps.println("ssh SERVER_NAME" + ENTER_KEY);

        ps.println(PASSWORD + ENTER_KEY);

        ps.close();

        InputStream in = channel.getInputStream();

        byte[] bt = new byte[1024];

        while (true) {

            while (in.available() > 0) {
                int i = in.read(bt, 0, 1024);
                if (i < 0)
                    break;
                String str = new String(bt, 0, i);
                // displays the output of the command executed.
                System.out.print(str);

            }
            if (channel.isClosed()) {

                break;
            }

        }

1 个答案:

答案 0 :(得分:0)

在命令之间放置Thread.sleep可以实现技巧=)