Ganymed ssh2:如何在命令行中解决(y / n)提示

时间:2012-03-16 09:17:10

标签: java ssh

我正在使用Ganymede ssh2从我的Java应用程序连接到服务器并在那里做一些工作 它完美地工作但问题是请求批准的ssh命令,例如。 命令

stop someService

返回

Are you sure (y/n)?

并在适当的击键(y / n)之后继续前进。

目前我正在使用ssh2 ganymed示例给出的实现,像这样:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

public class ConnectUtil(String hostname, String username, String password, String command)
{

    try
    {
        Connection conn = new Connection(hostname);
        conn.connect();

        boolean isAuthenticated = conn.authenticateWithPassword(username, password);

        if (isAuthenticated == false)
            throw new IOException("Authentication failed.");

        Session sess = conn.openSession();

        sess.execCommand(command);

        InputStream stdout = new StreamGobbler(sess.getStdout());

        BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

        while (true)
        {
            String line = br.readLine();
            if (line == null)
                break;
            System.out.println(line);
        }
        sess.close();
        conn.close();
    }
    catch (IOException e)
    {
        e.printStackTrace(System.err);
    }       
}

用上面提到的命令('stop someService')调用这个util类之后,它就被卡在了

String line = br.readLine();

并且在服务器超时后一切都会中断。

关于如何解决这个问题的任何想法都非常受欢迎。

非常感谢, 米洛斯。

3 个答案:

答案 0 :(得分:1)

假设SessiongetStdin()方法,您应该将问题的回复写入。

或者查看要求输入的命令是否具有不会提示的“非交互式”模式。

答案 1 :(得分:0)

如果您要使用stdin而不是exec,那么首先必须执行session.startShell()。阅读常见问题解答。

答案 2 :(得分:-1)

我使用此代码......

sess.executeCommand("ena"+'\n' +"pass"+'\n' +"exit"+'\n');