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

Java 读取JSch中上一个命令的响应后执行命令,java,ssh,inputstream,jsch,Java,Ssh,Inputstream,Jsch,我想使用JSch执行两个命令,但它们不应该同时执行。我这样做是为了从网关连接到服务器(因此使用ssh servername命令) 第一个命令:ssh servername 第二个命令:密码 我尝试了多种方法,但它们一直堆积在一起 JSch jsch = new JSch(); gateway = jsch.getSession(username, host, port); gateway.setPassword(password);

我想使用JSch执行两个命令,但它们不应该同时执行。我这样做是为了从网关连接到服务器(因此使用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;
            }

        }
JSch-JSch=new-JSch();
gateway=jsch.getSession(用户名、主机、端口);
gateway.setPassword(密码);
setConfig(SessionPool.defaultSessionConfig());
gateway.setHostKeyAlias(主机);
网关连接(20000);
System.out.println(“创建的会话”);
channel=gateway.openChannel(“shell”);
OutputStream ops=channel.getOutputStream();
PrintStream ps=新的PrintStream(ops,true);
channel.connect();
ps.println(“ssh服务器名称”+输入密钥);
ps.println(密码+输入密钥);
ps.close();
InputStream in=channel.getInputStream();
字节[]bt=新字节[1024];
while(true){
while(in.available()>0){
inti=in.read(bt,0,1024);
if(i<0)
打破
String str=新字符串(bt,0,i);
//显示执行的命令的输出。
系统输出打印(str);
}
if(channel.isClosed()){
打破
}
}

将Thread.sleep放在两个命令之间就可以了()

您说您试图运行两个命令,但我在您发布的代码中只看到一个(“ssh服务器名称”)。你能描述一下这个程序是如何失败的吗?您是否收到任何错误消息?您是否收到任何异常?第二个命令是我尝试使用服务器名称连接到的服务器的密码。没有错误。这两个命令只是一起执行,而不是像我希望的那样同时执行。这里的计划是在第一个命令生成提示后执行第二个命令。我好像弄不明白,没有错吧?那么当你运行你的程序时会发生什么呢?我无法连接到第二台服务器,这是由ssh server_NAME命令触发的,因为密码是在命令之后输入的,而不是在prompit正常运行之后,执行这两个命令。但不是我想要的方式