how to implement expect "interact" command using java

3.5k views Asked by At

I want to implement the expect "interact" command using java. In expect, it's possible to open an ssh session, authenticate and, then, use the "interact" command to give the control back to the user. Is that possible with java? I've tried with expectJ, expect4J and expectForJava but there's little documentation and almost no examples of how to do this. TIA.

Update: for "interact" command reference, please check this out: http://wiki.tcl.tk/3914

"Interact is an Expect command which gives control of the current process to the user, so that keystrokes are sent to the current process, and the stdout and stderr of the current process are returned."

2

There are 2 answers

0
Stephan Kristyn On

These libraries might suit your needs better:

SSHJ

https://github.com/shikhar/sshj

JSCH

http://www.jcraft.com/jsch/

4
Alexey Gavrilov On

In case anyone is interested, I have added basic interactive loop support to ExpectIt, my own open source Expect for Java implementation (sorry for self-promotion), since version 0.8.

Here is an example of interacting with the system input stream in Java 8:

        try (final Expect expect = new ExpectBuilder()
                .withInputs(System.in)
                .build()) {
            expect.interact()
                    .when(contains("abc")).then(r -> System.out.println("A"))
                    .when(contains("xyz")).then(r -> System.err.println("B"))
                    .until(contains("exit"));
            System.out.println("DONE!");
        }
        System.in.close();