Java 尝试执行命令时引发错误

Java 尝试执行命令时引发错误,java,ssh,Java,Ssh,在使用java中的Ganymed库时,我在尝试测试连接时遇到了一点问题,2周前它工作正常,没有问题,但现在我收到以下错误消息: The execute request failed. 这与Ganymed“execCommand()”方法有关。当我使用WinSCP进行连接时,一切正常,但尝试使用java进行连接时会出现错误。我也在想,也许防火墙也是原因,只是一个想法 我用来执行tail命令的代码如下: import java.io.BufferedReader; impo

在使用java中的Ganymed库时,我在尝试测试连接时遇到了一点问题,2周前它工作正常,没有问题,但现在我收到以下错误消息:

The execute request failed.
这与Ganymed“execCommand()”方法有关。当我使用WinSCP进行连接时,一切正常,但尝试使用java进行连接时会出现错误。我也在想,也许防火墙也是原因,只是一个想法

我用来执行tail命令的代码如下:

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


     public class SSHTesting {


public static void main(String[] args) {


    try{ Connection conn = new Connection("eappdev101.momentum.co.za");

    conn.connect();

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

        if (isAuthenticated == false) {
            System.out.println("Credentials are wrong.");
        }

        Session sess = conn.openSession();

        sess.execCommand("tail -f /logs/SystemOut.log");
        InputStream stdout = new StreamGobbler(sess.getStdout());
        BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

        sess.close();
        conn.close();
        System.out.println("Done");
}

catch(Exception ie){
    System.out.println(ie.getMessage());
}



}

    }

任何一道亮光都受到高度赞赏。提前感谢您。

对我来说,它与密钥配合使用很好,我认为出于安全原因,您应该使用密钥

检查下面的代码

private void init() throws IOException{
        char privateKeyChar[] = sshPrivateKey.toCharArray();

        conn = new Connection(ftpHostname,22);
        conn.connect();

        boolean isAuthenticated = conn.authenticateWithPublicKey(sshUsername, privateKeyChar, null);
        if (isAuthenticated == false)
            throw new IOException("Authentication failed.");

        session = conn.openSession();       
    }

    public String excuteCMD(String cmd) throws IOException
    {
        session = conn.openSession();
        session.execCommand(cmd);
        InputStream stdout = new StreamGobbler(session.getStdout());
        BufferedReader br = new BufferedReader(new InputStreamReader(stdout));

        while (true)
        {

            String line = br.readLine();
            if (line == null)
                break;
            else
                output+=line;
        }

        return output;
    }

代码看起来不错,这可能是因为SSH服务器身份验证配置。嗨,萨达姆,谢谢你的快速回复,如果我可以问的话,sshPrivateKey仍然是我用来登录的passowrd,或者它应该是使用Putty或?谢谢。您使用ssh keygen生成它,并将公钥置于Linux/Unix机器中的授权密钥下,请参阅下面的示例感谢链接Saddam,我将向您介绍我的进展情况,目前正在查看您建议的链接。您好Saddam,我发现它无法工作的原因是由于服务器关闭,很明显,有人篡改了我们使用的凭证,因此我遇到了问题,所以他们正在解决问题,所有这些都应该重新工作。再次感谢你抽出时间。